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

Leer datos de un cierto formato desde un fichero

Estas en el tema de Leer datos de un cierto formato desde un fichero en el foro de C/C++ en Foros del Web. Buenas, estoy bastante acostumbrado a programar en Fortran, pero ahora tengo un proyecto en el cual debo programar en C, y aunque tengo en mente ...
  #1 (permalink)  
Antiguo 12/03/2014, 08:21
 
Fecha de Ingreso: marzo-2014
Mensajes: 1
Antigüedad: 10 años, 8 meses
Puntos: 0
Leer datos de un cierto formato desde un fichero

Buenas,

estoy bastante acostumbrado a programar en Fortran, pero ahora tengo un proyecto en el cual debo programar en C, y aunque tengo en mente cómo hacer el programa, me falla el proceso de lecturas de datos desde un fichero.

Tengo un fichero en el cual hay dos tipos de datos. El primer tipo tiene el siguiente formato:

AAAA-MM-DD E F

(AAAA es año, MM es mes, DD es día, E es un número entero, y F uno decimal)

El segundo tipo es muy parecido:

AAAA-MM-DD F


A mí me interesa leer los números E y F del primer grupo de datos, guardándolos en dos vectores, y leer el número F del segundo grupo de datos, guardándolo en otro vector. Aquí es donde surge mi problema.

Estoy intentando hacer esto utilizando la función fscanf, escribiendo estos dos comando después de delcarar variables y abrir los ficheros:

fscanf (f1, "%d-%d-%d %d %f\n", &ano, &mes, &dia , E1, F1);
fscanf (f1, "%d-%d-%d %f\n", &ano, &mes, &dia, F2);

He declarado E1(3000), F1(3000) y F2(3000) asegurándome de que son suficientemente grandes para almacenar todos los números que hay en el fichero.

Haciendo esto, no consigo que se almacenen los números, ni siquiera el año. No sé si la función fscanf se utiliza así o no.

Agradecería cualquier ayuda, ya que tengo el algoritmo básico en mente, pero no puedo aplicarlo por culpa de que no sé cómo leer el fichero.

Muchas gracias.

Última edición por javiepe; 12/03/2014 a las 08:30
  #2 (permalink)  
Antiguo 13/03/2014, 14:49
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 3 meses
Puntos: 83
Respuesta: Leer datos de un cierto formato desde un fichero

"...Haciendo esto, no consigo que se almacenen los números, ni siquiera el año...."

El año si que lo guarda (y el mes y el dia), pero cuando intenta guardar el E1 se produce una violacion de segmento y ya nunca llega a intentar guardar F1:

Código C:
Ver original
  1. int E1[3000];
  2. float F1[3000];
  3. fscanf(f1, "%d-%d-%d %d %f\n", &ano, &mes, &dia , E1, F1);

fscanf espera un puntero a la posicion de memoria donde quieres leer el dato; observa la diferencia de tu codigo con la siguiente linea:

Código C:
Ver original
  1. fscanf(f1, "%d-%d-%d %d %f\n", &ano, &mes, &dia , &E1[0], &F1[0]);

De esta forma para el primer fscanf usas E[0], para el segundo E[1], para el tercero E[2], etc... ya ves como funciona; y para los F igual.

Otra cosa, como tienes el archivo, siempre hay una linea de E1,F1 seguido de una F2? O pueden estar intercaladas de forma aleatoria?

Aun otra cosa, estas reservando memoria para 3000 enteros y 6000 flotantes; es necesario? Has trabajado con memoria dinamica? De esta forma puedes ampliar las listas cuanto sea necesario sin limitar ni exagerar. Has trabajado tambien con estructuras? Con eso y la memoria dinamica puedes implementar listas de estructuras con todos los datos de cada lectura.

Resuelve primero lo de la violacion de segmento.

Saludos
vosk

Etiquetas: fichero, formato, int, programa
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 23:03.