Programación General > C/C++
Atrapado En La Lectura De Un Fichero
(1/1)
durden:
Holas !!!
Hace MUCHO tiempo q no toco C, y estoy algo espeso !!
Resulta que tengo un fichero ( llamemosle test.txt ), con 3 o 4 linias de datos.
Debo evaluar el contenido de cada linia por separado.
Mediante un fscanf voy leyendo los datos, ignorando los espacios y tabulaciones ( hasta aqui fenomeno ), pero mi problema llega en el momento del retorno de carro ( o return ). Un fscanf también salta los "return" y pasa al siguiente dato, por lo que no puedo diferenciar los datos de una linia, y los datos de la siguiente.
Q puedo hacer ???
Si alguien me puede pasar algun ejemplo de posibles soluciones.
Muchas gracias !!!
dreadlock:
mira esto que aqui adjunto quiza te funcione
--- Código: Text --- #include <string.h>#include <stdio.h>#include <conio.h> int main(void){ FILE *stream; char string[] = "This is a test"; char ch; /* abrir el archivo para lectura*/ stream = fopen("DUMMY.FIL", "r+"); //leer caracter por caracter //para comparar do { /* leer caracter */ ch = fgetc(stream); /* muestra el caracter */ putch(ch); } while (ch != EOF);//mientras no sea el fin del archivo fclose(stream);//cierra el archivo return 0;}[QUOTE]podrias hacerle las debidas modificaciones para evalues parrafo ´por parrafo, si tomas en cuenta que el salto de linea, o retorno de carro tiene estas equivalencias.1.- Formato hexadecimal 102.- Formato texto '\r'por lo que podrias poner algo como
--- Código: Text --- if((ch = fgetc(stream))!='\r'){//evaluas la cadena como desees /* muestra el caracter */ putch(ch);}elseprintf("\n");//imprime salto de linea
con fscanf, es algo parecido, solo tendrias que hacer algunas modificaciones.
Espero que esto te ayude
mabrev:
Hola:
¿Sabes exactamente cuántos elementos tiene cada línea y de que tipo son? En caso afirmativo, puedes seguir utilizando el fscanf, únicamente poniendo los datos relativos a todos los elementos que deseas leer en una unica orden:
fscanf(stream, "%i %i %i", &x1, &x2, &x3)
En caso de que desconozcas el número de elementos, deberás recurrir a alguna función de lectura que no desprecie el retorno de carro.
Saludos
plaf:
lo q puedes hacer es q despues de cada fscanf() te devuelvas 1 caracter con fseek() y lo lees con getc(), y ahi ves si es un '\n'
quedaria algo asi
--- Código: Text --- char c;fscanf(archivo, "%d", &num);hacer_lo_que_tengas_que_hacer_con(num);fseek(archivo, -1L, SET_CUR);c=getc(archivo);if(c=='\n') hacer_cosas_de_cambio_linea();else hacer_cosas_con_la_misma_linea();
chuidiang:
La función fgets() lee una línea completa.
Luego es cuestión de evaluar la línea con sscanf() o strtok() o cualquier otra función.
Se bueno.
Navegación
Ir a la versión completa