• Sábado 14 de Diciembre de 2024, 21:54

Autor Tema:  Atrapado En La Lectura De Un Fichero  (Leído 1320 veces)

durden

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Atrapado En La Lectura De Un Fichero
« en: Martes 30 de Diciembre de 2003, 12:58 »
0
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

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Atrapado En La Lectura De Un Fichero
« Respuesta #1 en: Martes 30 de Diciembre de 2003, 14:31 »
0
mira esto que aqui adjunto quiza te funcione
Código: Text
  1.  
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <conio.h>
  5.  
  6. int main(void)
  7. {
  8.    FILE *stream;
  9.    char string[] = "This is a test";
  10.    char ch;
  11.  
  12.    /* abrir el archivo para lectura*/
  13.    stream = fopen("DUMMY.FIL", "r+");
  14.  
  15. //leer caracter por caracter  
  16. //para comparar
  17.  
  18.   do
  19.    {
  20.       /* leer caracter */
  21.       ch = fgetc(stream);
  22.  
  23.       /* muestra el caracter */
  24.       putch(ch);
  25.    } while (ch != EOF);//mientras no sea el fin del archivo
  26.  
  27.    fclose(stream);//cierra el archivo
  28.    return 0;
  29. }
  30. [QUOTE]
  31. 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.
  32. 1.- Formato hexadecimal 10
  33. 2.- Formato texto            '\r'
  34. por lo que podrias poner algo como
  35.  
  36.  
  37.  
Código: Text
  1.  
  2. if((ch = fgetc(stream))!='\r'){
  3. //evaluas la cadena como desees
  4.       /* muestra el caracter */
  5.       putch(ch);
  6. }
  7. else
  8. printf("\n");//imprime salto de linea
  9.  
  10.  

con fscanf, es algo parecido, solo tendrias que hacer algunas modificaciones.
Espero que esto te ayude
UN intento de explicar lo inezplicable:D

mabrev

  • Miembro MUY activo
  • ***
  • Mensajes: 126
    • Ver Perfil
Re: Atrapado En La Lectura De Un Fichero
« Respuesta #2 en: Miércoles 7 de Enero de 2004, 12:36 »
0
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

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Re: Atrapado En La Lectura De Un Fichero
« Respuesta #3 en: Miércoles 7 de Enero de 2004, 22:56 »
0
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
  1.  
  2. char c;
  3. fscanf(archivo, "%d", &num);
  4. hacer_lo_que_tengas_que_hacer_con(num);
  5. fseek(archivo, -1L, SET_CUR);
  6. c=getc(archivo);
  7. if(c=='\n') hacer_cosas_de_cambio_linea();
  8. else hacer_cosas_con_la_misma_linea();
  9.  
  10.  

chuidiang

  • Miembro MUY activo
  • ***
  • Mensajes: 123
  • Nacionalidad: es
    • Ver Perfil
    • http://www.chuidiang.com
Re: Atrapado En La Lectura De Un Fichero
« Respuesta #4 en: Jueves 8 de Enero de 2004, 16:10 »
0
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.