Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: fvpg en 14 Marzo 2018, 01:56 am



Título: se busca solucion c++
Publicado por: fvpg en 14 Marzo 2018, 01:56 am
Buenas gente, llevo dias intentando solucionar el siguiente problema...
es sobre como leer datos de un archivo a una variable en c++,
usando la libreria fstream con las funciones ofstream para salida e ifstream para la entrada,
solo que cuando imprimo un archivo(salida) con una cadena con espacios todo bien,
el problema resulta cuando quiero leer esa cadena en una variable pero no puedo por los espacio y me arroja basura de la memoria, si alguien puede aportar una solucion o idea, se le agradece... , espero sus participaciones!... :)


Título: Re: se busca solucion c++
Publicado por: srWhiteSkull en 14 Marzo 2018, 18:45 pm
y la variable de que tipo es?


Título: Re: se busca solucion c++
Publicado por: fvpg en 16 Marzo 2018, 01:39 am
Es de tipo string , intenté con char pero no se como leer los espacios para la variable desde el archivo..


Título: Re: se busca solucion c++
Publicado por: srWhiteSkull en 16 Marzo 2018, 01:51 am
Pues por eso mismo, mientras que uno es un arreglo de caracteres (char* o char[]) el string es un objeto y diseñado para trabajar con cadenas de texto. Muéstrame el código o por lo menos la parte que inicializas el proceso de lectura hasta el final.

Entiendo que intentas leer un fichero de texto plano y no un binario ni nada por el estilo.


Título: Re: se busca solucion c++
Publicado por: fvpg en 16 Marzo 2018, 18:02 pm
/* VARIABLES DONDE SE DESEA GUARDAR LOS DATOS */

   string codigo;
   string nombre;
   int cant;
   
   ifstream entradaArchivo;
   
   entradaArchivo.open("archivo.txt",ios::in);
   
   entradaArchivo >> codigo;
   entradaArchivo >> nombre;
   entradaArchivo >> cant;
   
   entradaArchivo.close();

        cout << codigo << endl;
       cout << nombre << endl;
       cout << cant << endl;

/* el problema es que cuando imprimo el campo de nombres cuando lleva espacio
no lee estos espacio sino que asigna la cadena seguida del espacio a la otra variable
y al final arroja basura al mostrar el contenido de las variables */


Título: Re: se busca solucion c++
Publicado por: srWhiteSkull en 16 Marzo 2018, 20:16 pm
Claro, te entiendo, y encima seguro que tienes los datos separados por espacios. Pues de ser así no hay funciones de C++ que distinga a ese nivel de detalle.

Lo que si puedes hacer es tomar la solución que ofrezco  aquí (https://foro.elhacker.net/programacion_cc/leer_dos_archivos_csv-t481141.0.html;msg2156088#msg2156088), y analizar campo o columna por columna comprobando de que si se trata de un dato numérico al comienzo de la línea entonces que lo tome como código, incrementa índice de columna, si la segunda columna es de tipo texto (no es numérico) lo tome como nombre, incrementa índice, y si la siguiente columna es texto también lo concatene al nombre (e incrementa índice de columna) o de lo contrario si es numérico lo tome como cantidad (pasa a la siguiente fila y reinicia el índice de columna). Es facilísimo.

o

  entradaArchivo >> codigo;
   entradaArchivo >> nombre;
   entradaArchivo >> cant;
   // si (cant no es numerico) entonces concatena nombre+cant y hago de nuevo un..
   // ...entradaArchivo >> cant; en caso contrario nada


Suerte



Título: Re: se busca solucion c++
Publicado por: MAFUS en 17 Marzo 2018, 01:39 am
Pon una muestra del archivo de datos.


Título: Re: se busca solucion c++
Publicado por: fvpg en 20 Marzo 2018, 04:44 am
YA solucionè la entrada, era con un getline(entradaArchivo,variable);

asi leo una linea con espacio, ahora tengo un nuevo problema que es la
salida, quiero hacer la salida con una linea con espacio, pero al tener espacio no me imprime abas cadenas en una sino que donde esta el espacio termina toda la linea -.-

ayuda para esta nueva problematica please...


Título: Re: se busca solucion c++
Publicado por: ThunderCls en 22 Marzo 2018, 20:52 pm
A que te refieres con que no imprime ambas cadenas? Pudieras poner el codigo que usas?