Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Como hacer que fscanf saltee espacios en blanco?

Estas en el tema de Como hacer que fscanf saltee espacios en blanco? en el foro de C/C++ en Foros del Web. Basicamente eso, en un archivo de la siguiente manera http://pastebin.com/dJsi73FZ Cada registro utiliza 29 caracteres en total, los espacios en blanco son para que al ...
  #1 (permalink)  
Antiguo 22/10/2015, 10:33
 
Fecha de Ingreso: agosto-2015
Mensajes: 20
Antigüedad: 8 años, 8 meses
Puntos: 0
Como hacer que fscanf saltee espacios en blanco?

Basicamente eso, en un archivo de la siguiente manera

http://pastebin.com/dJsi73FZ

Cada registro utiliza 29 caracteres en total, los espacios en blanco son para que al modificar con fseek siempre esten a la misma altura el dni, nombre, etc

El tema es que cuando quiero buscar en el archivo, no se como hacer para que "ignore" los espacios en blanco
Desde ya gracias!
  #2 (permalink)  
Antiguo 22/10/2015, 10:47
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Como hacer que fscanf saltee espacios en blanco?

Lo más sencillo es en vez de leer con fscanf vayas leyendo con fgetc.

La idea podría ser más o menos la siguiente:

Cita:
// Rutina para leer el dni
1. leo caracter con fgetc
2. si no es un espacio:
2.1. acumulo el caracter correspondiente al campo DNI
2.2. salto a 1
// Rutina para saltar series de espacios en blanco
3. leo caracer con fgetc
4. si es un espacio salto a 3
// Rutina para leer el nombre
5. acumulo el caracter correspondiente al campo nombre
6. leo caracter con fgetc
7. si no es un espacio salto a 5
Y con repetir las dos últimas rutinas para el resto de campos lo tendrías hecho.

E incluso podrías generalizar aún más el proceso:

Para leer un campo:

Cita:
1. leo caracer con fgetc
2. si es un espacio salto a 1
3. acumulo el caracter al campo que corresponda
4. leo caracter con fgetc
5. si no es un espacio salto a 3
Repitiendo estas 5 rutinas en cascada puedes leer todos los campos de forma secuencial... ahora solo te faltaria pegarte con el salto de línea, no te lo iba a dar todo mascado, no? :)

Un saludo
  #3 (permalink)  
Antiguo 22/10/2015, 10:54
 
Fecha de Ingreso: agosto-2015
Mensajes: 20
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: Como hacer que fscanf saltee espacios en blanco?

Cita:
Iniciado por eferion Ver Mensaje
Lo más sencillo es en vez de leer con [URL="http://www.cplusplus.com/reference/cstdio/fscanf/"]fscanf [/URL]vayas leyendo con [URL="http://www.cplusplus.com/reference/cstdio/fgetc/"]fgetc[/URL].

La idea podría ser más o menos la siguiente:



Y con repetir las dos últimas rutinas para el resto de campos lo tendrías hecho.

E incluso podrías generalizar aún más el proceso:

Para leer un campo:



Repitiendo estas 5 rutinas en cascada puedes leer todos los campos de forma secuencial... ahora solo te faltaria pegarte con el salto de línea, no te lo iba a dar todo mascado, no? :)

Un saludo

Sinceramente no entiendo como usar fgetc para ir guardando de a un caracter, con el fscanf tenes idea?
  #4 (permalink)  
Antiguo 22/10/2015, 11:02
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Como hacer que fscanf saltee espacios en blanco?

Cita:
Iniciado por matitlive Ver Mensaje
Sinceramente no entiendo como usar fgetc para ir guardando de a un caracter, con el fscanf tenes idea?
Código C:
Ver original
  1. FILE* fichero;
  2.  
  3. // ... operaciones intermedias, como abrir el fichero ...
  4.  
  5. char cadena[20];
  6. *cadena = '\0'; // Para que funcione strcat, las cadenas han de terminar en '\0'
  7.  
  8. char c;
  9. int i=10;
  10. while(i--) // Bucle hasta que i==0
  11. {
  12.   c = fgetc(fichero);
  13.   strcat(cadena,c);
  14. }
  15. strcat(cadena,'\0'); // Las cadenas deben terminar con '\0'
  16.  
  17. printf("%s", cadena);
  #5 (permalink)  
Antiguo 22/10/2015, 13:32
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Como hacer que fscanf saltee espacios en blanco?

También puedes usar fgets que no tiene problemas con los espacios.

Etiquetas: espacios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:35.