se busca solucion c++

Iniciado por fvpg, 14 Marzo 2018, 01:56 AM

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

fvpg

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!... :)


fvpg

Es de tipo string , intenté con char pero no se como leer los espacios para la variable desde el archivo..

srWhiteSkull

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.

fvpg

/* 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 */

srWhiteSkull

#5
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í, 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


MAFUS

Pon una muestra del archivo de datos.

fvpg

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...

ThunderCls

A que te refieres con que no imprime ambas cadenas? Pudieras poner el codigo que usas?
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/