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

Leer fichero en c

Estas en el tema de Leer fichero en c en el foro de C/C++ en Foros del Web. Buenas! Tengo un problemilla a la hora de hacer un ejercicio, el caso es que tengo un archivo .txt que quiero leer y transformar en ...
  #1 (permalink)  
Antiguo 21/05/2014, 07:52
Avatar de Totti7  
Fecha de Ingreso: mayo-2012
Ubicación: barcelona
Mensajes: 28
Antigüedad: 12 años, 7 meses
Puntos: 2
Leer fichero en c

Buenas!
Tengo un problemilla a la hora de hacer un ejercicio, el caso es que tengo un archivo .txt que quiero leer y transformar en código c utilizando una función getc.. soy principiante en esto de la programación en c, así que agradecería vuestra ayuda. Lo que quiero hacer es que me lea el fichero, pero cuando llegue a una coma(,) salte de linea y continúe leyendo el código hasta otra coma y así sucesivamente. De momento tengo esto, que creo que me lee el código entero. Gracias por adelantado:)
Código C:
Ver original
  1. void llenarasignaturas(int c){
  2.    
  3.     FILE *f;
  4.     f=fopen("asignaturas.txt","r");
  5.     while (c!=EOF)
  6.     {
  7.         printf("%c",c);
  8.         c=getc(f);
  9.      
  10.     }
  11.          fclose(f);
  12.    
  13. }
  #2 (permalink)  
Antiguo 22/05/2014, 05:22
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: Leer fichero en c

La idea es leer linea por linea en vez de caracter por caracter tal como tienes en tu codigo, una vez tienes cada linea, la tokenizas por el caracter que quieres usar como separador (en tu caso la coma , ) y ya tienes lo que sería el substring.

Para eso tienes dos opciones: leer todo el archivo en un buffer, tokenizar por saltos de linea para obtener cada linea y tokenizar cada linea por comas; o bien leer linea por linea y tokenizar por comas.

Lo mas facil es leer linea por linea: para eso usas la funcion fgets (echa un vistazo a tu manual de c para ver los argumentos y valores de retorno de esta funcion). Un trozo de codigo para obtener cada linea:

Código C:
Ver original
  1. FILE *arx;
  2. char *rv, line[MAXLINELENGTH];
  3.  
  4. if((arx = fopen("test.txt", "r"))) {
  5.     while(1) {
  6.         if((rv = fgets(line, sizeof(line), arx))) {
  7.             //lectura positiva
  8.             //volcado para comprovacion
  9.             printf("%s\n", line);
  10.            
  11.             //aqui tokenizas el 'line'
  12.             ...
  13.         }
  14.         else {
  15.             //se produjo algun error
  16.             //recuperas el error y notificas al usuario
  17.             if(ferror(arx)) {
  18.                 //error de lectura
  19.             }
  20.             else if(feof(arx)) {
  21.                 //final de archivo, no necesitas notificarlo
  22.             }
  23.            
  24.             //en cualquier caso de error finalizas el ciclo
  25.             break;
  26.         }
  27.     }
  28.  
  29.     fclose(arx);
  30. }
  31. else {
  32.     //error de acceso
  33. }

Te he comentado lo mas importante en el codigo, hasta aqui todo ok?

Ahora la funcion para tokenizar la linea. Una vez tienes el 'line' quieres separar la parte de antes de la coma, eso se llama tokenizar. Puedes usar la funcion strtok que sirve exactamente para eso. Ten en cuenta que esta funcion modifica la cadena de texto que le envias; como alternativa tienes la implementacion reentrante strtok_r (no forma parte del estandar, tienes que buscarla por internet o crearla tu mismo, pero es muy facil encontrarla por ahi).

Ahora vamos a la linea de los ..., despues de obtener la 'line' le aplicas el strtok y obtienes directamente lo que buscas (tienes que declarar una nueva variable char *pch):

Código C:
Ver original
  1. //aqui tokenizas el 'line'
  2. if((pch = strtok(line, ","))) {
  3.     //ok ya lo tienes
  4.     printf("%s\n", pch);
  5. }

Creo que no hay nada mas que comentar, espero que te sea de ayuda

Saludos
vosk
  #3 (permalink)  
Antiguo 25/05/2014, 14:32
Avatar de Totti7  
Fecha de Ingreso: mayo-2012
Ubicación: barcelona
Mensajes: 28
Antigüedad: 12 años, 7 meses
Puntos: 2
Respuesta: Leer fichero en c

Graciass:D

Última edición por Totti7; 25/05/2014 a las 14:39

Etiquetas: lenguajec, programacion, punteros
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 18:52.