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

¿como se almacena un registro en un vector,leyendo un fichero?

Estas en el tema de ¿como se almacena un registro en un vector,leyendo un fichero? en el foro de C/C++ en Foros del Web. YO QUIERO ALMACENAR UN REGISTRO EN UN VECTOR DE REGISTROS,PERO LO HAGO MAL Hola,mirar yo tengo en un fichero lo siguiente: 1 b c 2 ...
  #1 (permalink)  
Antiguo 28/11/2008, 03:10
 
Fecha de Ingreso: noviembre-2007
Mensajes: 533
Antigüedad: 16 años, 5 meses
Puntos: 1
¿como se almacena un registro en un vector,leyendo un fichero?

YO QUIERO ALMACENAR UN REGISTRO EN UN VECTOR DE REGISTROS,PERO LO HAGO MAL

Hola,mirar yo tengo en un fichero lo siguiente:

1 b c
2 a b
....

cada linea es un registro
struct Tregistro{
int origen;
char simbolo;
int destino;
};

y ahora quiero segun vaya leyendo ir metiendo en mi vector de registros Tregistro vector[100];

en la linea vector[i]=aux....creo que está el error,el codigo es el siguiente:

Código:
# struct Tregistro{
#     int origen;
#     char simbolo;
#     int destino;
#  
# };
# Tregistro vector[100];
#  
# void LeerFichero(char fichero[]){
#  
#     fstream fic;
#     string linea;
#     Tregistro aux; 
#     int i=0;
#     fic.open(fichero,ios::in);
#    
#     if(!fic){
#  
#         cout<<"error,apertura del fichero"<<endl;
#     }
#     else{
#         //cout<<"aqui"<<endl;
#         //getline(fic,linea);
#         //cout<<linea<<endl;
#         fic.read((char*)&aux,sizeof(Tregistro));
#         while(!fic.eof()){
#             vector[i]=aux;
#             //cout<<"y aqui"<<endl;
#             cout<<vector[0].origen<<endl;
#             //getline(fic,linea);
#             //cout<<linea<<endl;
#             fic.read((char*)&aux,sizeof(Tregistro));
#         i++;   
#         }
#        
#     }
#     fic.close();
# }
ALGUIEN ME PUEDE AYUDAR???
  #2 (permalink)  
Antiguo 28/11/2008, 03:25
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: ¿como se almacena un registro en un vector,leyendo un fichero?

No hay ninguna necesidad de usar una variable auxiliar, podes leer directamente en el array.

Código:
fic.read((char*)&vector[i], sizeof(Tregistro));
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 28/11/2008, 03:32
 
Fecha de Ingreso: noviembre-2007
Mensajes: 533
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: ¿como se almacena un registro en un vector,leyendo un fichero?

Hola,ya veo que contestas a los dos foros,y te respondo,mira ese no es mi problema,sino almacenar el registro, no se como almacenar el registro,si se hace asi?

vector[i]=aux.

o como se que he leido origen,simbolo y destino.

la cuestion está despues:

fic.read((char *)&aux,sizeof(Tregistro));
while(!fic.eof()){


///aqui como lo almaceno???
fic.read((char *)&aux,sizeof(Tregistro));

}

Me entendistes? un saludo,espero que ahora si me hayas entendido.Gracias.
  #4 (permalink)  
Antiguo 28/11/2008, 03:47
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: ¿como se almacena un registro en un vector,leyendo un fichero?

Y yo veo que preguntas lo mismo en al menos dos foros. Yo te respondo la forma logica de hacerlo, no hace falta que uses un buffer temporal/auxiliar o como lo quieras llamar, podes leer directamente sobre el array. Si vos queres hacerlo a tu manera por algun capricho no me interesa, arreglate como puedas. Y muchisimo menos voy a perder el tiempo tratando de encontrar TU solucion cuando pegas pedazos de codigo. ¿Me entendiste?
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 28/11/2008, 04:37
 
Fecha de Ingreso: noviembre-2007
Mensajes: 533
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: ¿como se almacena un registro en un vector,leyendo un fichero?

Hola,correcto,no lo dudo que no funcione,te paso el codigo de tu forma,pero ahora yo te pregunto,asi,como comprabarás...no guardas el registro,,porquen el cout que esta por el medio,no imprime el campo del registro,aqui tu código..es asi lo que me quieres decir?

Código:
using namespace std;

const char fichero[]="afi.txt";

struct Tregistro{
	int origen;
	char simbolo;
	int destino;

};

//Tregistro vector[100];

void LeerFichero(char fichero[]){

	fstream fic;
	string linea;
	Tregistro aux;	
	int i=0;
	Tregistro vector[100];
	int ori=0,des=0;
	char sim;

	
	fic.open(fichero,ios::in|ios::binary);
	
	if(!fic){

		cout<<"error,apertura del fichero"<<endl;
	}
	else{
		//cout<<"aqui"<<endl;
		//getline(fic,linea);
		//cout<<linea<<endl;
		fic.read((char*)&vector[i],sizeof(Tregistro));
		//fic>>ori;
		while(!fic.eof()){
			
			cout<<vector[i].origen<<endl;
			//cout<<vector[0].origen<<endl;
			//getline(fic,linea);
			//cout<<linea<<endl;
			fic.read((char*)&vector[i],sizeof(Tregistro));
		i++;	
		}
		
	}
	fic.close();
}
el cout<<vector[i].origen<<endl,no me imprime nada más que una serie de numeros..es decir no se si tengo algo en esa posicion.no se si asi lo guarda...
Espero haberte entendido
  #6 (permalink)  
Antiguo 28/11/2008, 05:57
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: ¿como se almacena un registro en un vector,leyendo un fichero?

¿Y que queres que imprima? Imprimira la serie de numeros que haya en el campo origen de cada una de esas estructuras que haya en el archivo ...

La verdad es que no parece que entiendas mucho y se ve reflejado en tu codigo. Proba esto (ES UN EJEMPLO):


Código:
for (;;)
{	
  fic.read((char*)&vector[i], sizeof(Tregistro));
  if (fic.eof()) { break; }
  cout << "Origen:" << vector[i].origen << " Simbolo:" << vector[i].simbolo << " Destino:" << vector[i].destino << endl;
  i++;
}
Si tenes un archivo con ese formato te va mostrar correctamente los campos que lea.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 28/11/2008 a las 06:02
  #7 (permalink)  
Antiguo 28/11/2008, 06:14
 
Fecha de Ingreso: noviembre-2007
Mensajes: 533
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: ¿como se almacena un registro en un vector,leyendo un fichero?

vale...gracias,te sigo preguntando:

pero si yo tengo en el fichero:

1 a 2
2 b 3

esto lo lee???

a mi no me imprime ninguno de estos,más solo se mete una vez en el fichero.y se supone que se deberia leer las dos veces,no digo en el tuyo,sino en la modificacion del mio.
  #8 (permalink)  
Antiguo 28/11/2008, 06:18
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: ¿como se almacena un registro en un vector,leyendo un fichero?

Si el archivo lo escribiste a mano te equivocaste y no sirve, por eso dije: "Si tenes un archivo con ese formato te va mostrar correctamente los campos que lea."

Para que sea valido teniendo en cuenta la estructura que declaraste (tal vez este mal la estructura) tiene que ocupar 4 bytes por cada elemento (con un compilador moderno). Seguramente por eso entra una sola vez, es en realidad texto tu archivo y no llega al tamaño de dos estructuras ... escribi la estructura desde codigo para ver como queda y usa un editor hexadecimal ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 28/11/2008 a las 06:24
  #9 (permalink)  
Antiguo 28/11/2008, 06:29
 
Fecha de Ingreso: noviembre-2007
Mensajes: 533
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: ¿como se almacena un registro en un vector,leyendo un fichero?

Correcto,es el problema,pero entonces tendria que cambiar la forma de leer el fichero,es decir,si yo tengo que leer un txt,tendria que cambiar la forma de leer el fichero...verdad?
  #10 (permalink)  
Antiguo 28/11/2008, 06:37
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: ¿como se almacena un registro en un vector,leyendo un fichero?

Si; no podes leer asi con una estructura ya que hay campos de tamaño variable (en el caso de los numeros por ejemplo pueden ser 7 o 123 y ocuparian 1 o 3 bytes en cada caso).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 11:31.