SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: pacorubio77 en Martes 2 de Septiembre de 2008, 17:16
-
Hola,no es concretamente una línea,la cuestion es que tengo que leer de un fichero de texto y escribir en un fichero binario,eso lo tengo claro,pero mi linea en el fichero de texto es:
45689756:julian martinez:Fernandez:33
la cuestion es que si leo con getline(fic,linea),estoy leyendo toda la linea,y está claro que los : no los tengo que almacenar,como hago para leer quitando los :?
esa es mi cuestion,porque luego guardarlo en un fichero binario,lo tengo claro.
Me podeis ayudar?
-
El getline tiene 3 datos o tres parametros
uno es la variable, el tamaño y el tercero es algo asi como el caracter a finalizar
fic.getline(var,20,':');
siendo fic una variable de tipo fstream
de resto es prueba y error y esta listo
espero que sea de ayuda
-
usa getline para leer todad la linea y despues separala con strtok (http://c.conclase.net/librerias/funcion.php?fun=strtok) y ya despues de que la haya separado lo guardas en el binario
-
no conocia la funcion getline(), pero para este caso parece ser perfecta ;)
aunque siempre puedes quemarte un poco la cabeza y lograr lo mismo.
otra manera de la cual podrias hacerlo (sabiendo el orden de los datos de antemano) con un while que almacene caracteres leidos mientras no sea un ':' y despues asignas al dato que corresponda la cadena resultante , duplicarias ese bucle la cantidad de veces igual a la cantidad de datos que tengas, capaz podrias meterlo dentro de una funcion para hacerlo mas prolijo.
saludos ;)
-
HOla,he sacado la solucion y se la digo a todos vosotros si os interesa ,ya que habeís puesto mucho interes..la idea es realizar una funcion de SacarPalabras(.......),,,como paramentros en referencia para poder asi mismo devolverlos ,de la siguiente manera:
void SacarCampos(string &matricula1,string &nombre1,string &apellidos1,string linea){
int j=0;
int longi;
cout<<"aqui"<<endl;
longi=linea.length();
//cout<<longi<<endl;
while(j<longi){
while(linea[j]!=':'){
matricula1=matricula1+linea[j];
j++;
}
j++;
while(linea[j]!=':'){
nombre1=nombre1+linea[j];
j++;
}
j++;
while(j<longi){
apellidos1=apellidos1+linea[j];
j++;
}
j++;
}
}
Y luego como es normal la funcion de LeerFichero,donde puedo a la misma vez ,leer el fichero de texto y escribir en le fichero binario.
void LeerFichero(){
string linea,matricula1,apellidos1,nombre1;
Tcoche coche;
bool correcto=false;
fstream fic,fic2;
fic.open("coches.txt",ios::in);
fic2.open("coches.dat",ios::out |ios::binary);
if ((!fic) || (!fic2)){
cout<<"error apertura de fichero"<<endl;
}
else{
getline(fic,linea);
while(!fic.eof()){
SacarCampos(matricula1,nombre1,apellidos1,linea);
strncpy(coche.matricula,matricula1.c_str(),10-1);
coche.matricula[10-1]=' ';
correcto=DniCorrecto(coche.matricula);
strncpy(coche.nombre,nombre1.c_str(),10-1);
coche.nombre[10-1]=' ';
strncpy(coche.apellidos,apellidos1.c_str(),10-1);
coche.apellidos[10-1]=' ';
cout<<matricula1<<" "<<nombre1<<" "<<apellidos1<<endl;
if(correcto==true){
fic2.write( (const char*)&coche,sizeof(coche));
}
matricula1="";
nombre1="";
apellidos1="";
getline(fic,linea);
}
}
}
Espero haberles ayudado.Gracias por el interes.
-
ah, ayer justo hice una funcion de sacar palabra.
Che, fijate cuando escribas un mensaje, arriba del campo de texto, hay unos botones que son como de texto embebido, uno dice "Code", pegas todo tu codigo ahi adentro y es mas agradable para leerlo jaja
;)
saludos