consulta lectura desde archivo

Iniciado por oskrg55, 12 Agosto 2015, 05:17 AM

0 Miembros y 1 Visitante están viendo este tema.

oskrg55

hola gente tengo un problema con un codigo deseo leer codigo nombre y cedula imprimir eso digamos 234 mario mora 304060
pero sale esto cedula 234 NOMBRE mario mora 2031 cedula 345
osea nada que ver digamos el 345 lo coge del siguiente usuario que estara mal aca codigo c++ aparte nombre es un char de 50

Código (cpp) [Seleccionar]
void registros()
{
system ("cls");
   ifstream entradaRg("regEC.txt",ios::in);
cout << "\t\t\tREGISTROS DEL SISTEMA...\n"<<endl;
cout<< "________________________________________________________________________________\n"<<endl;
   if(!entradaRg)
   {
       cerr<<"\t\t\aERROR!!! NO SE PUDO ABRIR EL ARCHIVO O NO EXISTEN REGISTROS\n";
       exit(1);
   }
while (!entradaRg.eof())
{
 if(!entradaRg)
   {
       break;
   }
    entradaRg>>cedula;
   entradaRg.getline(nombre,50);
   entradaRg>>codigo;
 cout << "\t\t\t\tCEDULA  [ "<<cedula<<" ]\n\t\t\t\tNOMBRE  [ "<<nombre<<" ]\n\t\t\tCODIGO DE CARTON[ "<< codigo<<" ]"<<endl;
   cout<< "________________________________________________________________________________\n"<<endl;
   }
entradaRg.close();
cout <<"Regresando al menu principal"<<endl;
cout <<endl;
system("pause");
main();
}

se agradece la ayuda


Mod: Los códigos deben ir en etiquetas GeSHi, segundo aviso

ivancea96

Código (cpp) [Seleccionar]
entradaRg.getline(nombre,50);

Eso lee 50 caracteres, hasta el fin de linea. Lo que implica, que salvo que casualmente el nombre tenga 50 caracteres (contando espacios), va a leerlo todo.

Lo que debes hacer es, primero, leer la linea entera:

Código (cpp) [Seleccionar]
string linea;
getline(entradaRg, linea);


Una vez tengas la linea completa en la string, vas separando sus componentes. Por ejemplo, para sacar el primer número, harías:
Código (cpp) [Seleccionar]
size_t posicion;
posicion = linea.find(' '); // Buscas el primer espacio, empezando desde el principio
string cedulaStr = linea.substr(0,posicion); // Coge una subcadena que empieza en 0, y coge X caracteres
                                                              // En este caso coincide que la posicion del espacio es el numero de caracteres
cedula = stoi(cedulaStr); // Convierte la cadena numérica a un entero


Si tienes dudas de alguna función, puedes buscar en esta página. Por ejemplo, aquí ves stoi: http://www.cplusplus.com/reference/string/stoi/

Como el nombre supongo que no sabes cuantas palabras puede ser, deberías buscar primero la última parte, el código. Para ello, puedes usar rfind():

Código (cpp) [Seleccionar]
posicion = linea.rfind(' ');
codigo = stoi( linea.substr(posicion+1) );

rfind() empieza a buscar el caracter o cadena desde el final.
Por cierto, find() y rfind() te retornan el índice de la primera ocurrencia en la string.
El segundo parámetro de find() y rfind() es opcional, y es el índice desde el que quieres empezar a buscar.

oskrg55

Esta genial ese codigo pero no habrá forma de hacerlo con caracteres esq es la parte final del programa y tendría q cambiar toda la estructura :( mas bien gracias perdón por la molestia

ivancea96

Puedes transformar una cadena a string:
Código (cpp) [Seleccionar]
string str(cadena); // cadena: char o char[]
// O...
string str = string(cadena);


A ver. Find, substr, son funciones que puedes reproducir para cadenas, pero convirtiendo a string te ahorras mucho

oskrg55