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

[0] Índice de Mensajes

Ir a la versión completa