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

Leer listas desde archivo

Estas en el tema de Leer listas desde archivo en el foro de C/C++ en Foros del Web. Sucede que tengo un archivo .txt de la siguiente forma 2 4 A B C D 0.0 5.0 0.0 3.0 0.0 0.0 3.0 3.0 4 ...
  #1 (permalink)  
Antiguo 30/07/2010, 00:01
 
Fecha de Ingreso: julio-2010
Mensajes: 1
Antigüedad: 13 años, 9 meses
Puntos: 0
Leer listas desde archivo

Sucede que tengo un archivo .txt de la siguiente forma

2
4
A B C D
0.0 5.0 0.0 3.0
0.0 0.0 3.0 3.0
4
E F G H
12.2 14.8 27.11 4.12
2.12 8.14 11,27 12.4

donde 2 corresponde a la cantidad de 'nodos', los 4 se refiere a la cantidad de char i flotantes que hay en las lineas siguientes


Mi duda es, cuál sería el codigo para leer los char ilos flotantes hacia el lado, por que cuando ocupo fscanf, lee, pero hacia abajo. Sé que puedo hacer fscanf(archivo,"%f %f %f %f",&a, &b, &c, &d); , pero como seria si esa cantidad cambiara a 100.


Desde ya muchas gracias
  #2 (permalink)  
Antiguo 30/07/2010, 20:30
Avatar de gvite666  
Fecha de Ingreso: abril-2010
Mensajes: 65
Antigüedad: 14 años
Puntos: 4
Respuesta: Leer listas desde archivo

pues mira lo primero que tienes que hacer es darle un determinado numero de digitos a tus cosas,por ejemplo hasta cuantos nodos podras almacenar si quieres almacenar 100 tendras que darle tres digitos y aunque solo tengas 2 nodos en tu archivo debera estar asi 002, el numero de char que quieras almacenar, 004 si quieres almacenar un maximo de 999 chars, tambien darle una determinada longitud a tus chars con un relleno A*** si quieres un convinacion de cuatro letras, y espero que me explique para los flotantes.

con todo esto ya es suficiente para trabajar en lo que quieres.
has de cuenta que tienes asi tu archivo
002
004
A*** B*** C *** D***
012.2 014.8 27.11 04.11
012.2 014.8 27.11 04.11
004
A*** B*** C*** D***
012.2 014.8 27.11 04.11
012.2 014.8 27.11 04.11
con la funcion fseek puedes pocicionarte en donde tu quieras solo tienes que saber como usarla.
por ejempo si le pones fseek(Archivo,4,SEEK_SET); te va a pocicionar justo antes de 004 que son los tres digitos de 002 y el salto de linea (claro te lo digo en caso de que no sepas de esta funcion).
Asi no importa si tienes 100 o mas (depende de lo que le pongas en la longitud de tus datos) siempre sera la misma.

asi podras acceder a calquier nodo.
¿como? asi:
si quieres acceder al segundo tado solo tienes que saber la longitud del primero en este caso solo el cuatro y con el cuatro sabemos cual es la longitud asi
Código C:
Ver original
  1. fseek(archivo,4,SEEK_SET);//primero me posiciono en la cantidad
  2. fscanf("%i",&Camtidad);//leo la cantidad
  3. Long=Cantidad*LongChar+Cantidad*LongFloat*2;
  4. /*para mi ejemplo estos son los valores de : longChar=5 LongFloat=4 uno mas de lo que se ve por los espacios y el salto de linea*/
  5. //con esto tienes la longitud del primer nodo y asi ya puedes saltartelo e ir al siguiente nodo
  6. fseek(Archivo,Long,SEEK_CUR);//lo saltamos y leemos la longitud
  7. //con esto puedes poner un for para leer lo datos que quieras
  8. fscanf("%i",&Camtidad);
  9. for(i=0;i<Cantidad;i++)
  10. {
  11. fscanf("%s",strDato);
  12. fseek(Archivo,1,SEEK_CUR);//vueno aqui haces lo que quieras con el primer dato.
  13. }
Bueno esta es solo la idea tu sabras que es lo que quieres hacer, recuerda que un programa por mas largo que sea si esta bien estructurado, cuando se acabe simplemente sera maravilloso.

Etiquetas: fscanf, nodos
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 21:14.