Autor
|
Tema: Error al recuperar datos de fichero de texto con delimitadores (Leído 2,830 veces)
|
DarAlan
Desconectado
Mensajes: 3
|
Buenas tardes. Hago esta publicación para saber si alguien me ayuda a detectar un error de compilación. Mi programa debe recuperar datos de un archivo de texto usando delimitadores para almacenarlos en un objeto. Mi código es el siguiente.
/*arch es el archvio de texto, dat es el objeto donde se almacena la información,newnom,newtel y newcor son variables de tipo string*/
case 2:{ ifstream arch("agenda.txt",ios::in); if(arch.fail()){ cout << "El archivo no existe o esta dañado" << endl; } else{ while(!arch.eof()){ arch.getline(newnom,'°'); arch.getline(newtel,'°'); arch.getline(newcor,'°'); dat->setNom(newnom); dat->setTel(newtel); dat->setCor(newcor); cout << dat->getNom() << endl; cout << dat->getTel() << endl; cout << dat->getCor() << endl; } } break; }
El problema se encuentra en las líneas "arch.getline". Según codeblocks, se esperan tres parámetros en lugar de dos, pero según mi maestro, se necesita solo la variable string, y el delimitador como parámetro de la función. Estuve investigando sobre el tema y noté que algunas personas usan un numero como tercer, parámetro, pero no sé para que se utiliza. ¿Alguna idea de cuál pueda ser el error y cómo solucinarlo?.
|
|
|
En línea
|
|
|
|
Loretz
Desconectado
Mensajes: 117
|
std::istream::getline http://www.cplusplus.com/reference/istream/istream/getline/Son dos funciones istream& getline (char* s, streamsize n ); istream& getline (char* s, streamsize n, char delim ); La primera asume '\n' como delimitador; la segunda acepta el que le pongas. Ese delimitador es el tercero de los parámetros, te está faltando el streamsize del medio. Hay otro error además, arch activa el bit eof cuando se ha pretendido leer más allá del final, no cuando la próxima lectura pretenderá leerlo (¿cómo podría saberlo?).
|
|
|
En línea
|
|
|
|
DarAlan
Desconectado
Mensajes: 3
|
Gracias por responder. ¿Entonces si es necesario el tercer parámetro?
|
|
|
En línea
|
|
|
|
K-YreX
|
En realidad el tercer parámetro no es obligatorio, pero el segundo sí, que es el tamaño. Lo que tú estás usando como segundo parámetro en realidad es el tercero. Por lo tanto, para tu caso son necesarios los 3 parámetros (elige un tamaño lo suficientemente grande para el segundo parámetro y listo, si sabes que vas a encontrar antes el delimitador). Suerte
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
DarAlan
Desconectado
Mensajes: 3
|
Gracias por responder. Probé tu solución, pero el problema persiste, aún cuando el tamaño es lo suficientemente grande para recuperar el string.
|
|
|
En línea
|
|
|
|
K-YreX
|
Muestra a ver cómo lo has implementado y qué error te muestra
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
alpachino98
Desconectado
Mensajes: 37
Valar Morghulis
|
Lo que te pasa es que getline debe recibir un flujo de entrada como primer parámetro(el fichero), el string donde se copia y el carácter delimitador. Por cierto, si dat es un iterador de una lista, recuerda aumentar su posición en cada iteracion cada vez que lees del fichero. Por ejemplo para un carácter delimitador de una coma seria: #include <string> #include <iostream> #include <fstream>
using namespace std;
int main() { string newNom,newCorreo,newNum; fstream f("contactos.txt",ios::in);
if(!f.is_open()) cout<<"Error abriendo el fichero"<<endl; else while(!f.eof()) { getline(f,newNom,','); getline(f,newCorreo,','); getline(f,newNum,','); cout<<newNom<<endl; cout<<newCorreo<<endl; cout<<newNum<<endl; }
}
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Se pueden recuperar los datos de una particion eliminada por error? Help me!!!
Dudas Generales
|
Erny
|
8
|
5,427
|
23 Febrero 2014, 23:11 pm
por moikano→@
|
|
|
Guardar fichero de texto
Programación Visual Basic
|
BenRu
|
6
|
2,927
|
20 Junio 2007, 21:59 pm
por BenRu
|
|
|
Error al leer un fichero de texto en Python
« 1 2 »
Scripting
|
CaronteGold
|
17
|
12,798
|
20 Diciembre 2010, 20:26 pm
por CaronteGold
|
|
|
2 delimitadores para obtener texto (vb.net)
.NET (C#, VB.NET, ASP)
|
<housedir>
|
4
|
6,097
|
22 Julio 2013, 22:13 pm
por Eleкtro
|
|
|
Ayuda con un ejercicio. Grabar datos en un fichero secuencial de texto.
Java
|
Droigor
|
7
|
6,500
|
22 Marzo 2014, 21:31 pm
por Debci
|
|