elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error al recuperar datos de fichero de texto con delimitadores
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error al recuperar datos de fichero de texto con delimitadores  (Leído 2,416 veces)
DarAlan

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Error al recuperar datos de fichero de texto con delimitadores
« en: 21 Enero 2019, 21:54 pm »

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 Desconectado

Mensajes: 117


Ver Perfil
Re: Error al recuperar datos de fichero de texto con delimitadores
« Respuesta #1 en: 21 Enero 2019, 22:19 pm »

std::istream::getline
http://www.cplusplus.com/reference/istream/istream/getline/

Son dos funciones
Código:
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,
Código:
while(!arch.eof()){
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 Desconectado

Mensajes: 3


Ver Perfil
Re: Error al recuperar datos de fichero de texto con delimitadores
« Respuesta #2 en: 21 Enero 2019, 22:48 pm »

Gracias por responder. ¿Entonces si es necesario el tercer parámetro?
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Error al recuperar datos de fichero de texto con delimitadores
« Respuesta #3 en: 22 Enero 2019, 15:01 pm »

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 :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
DarAlan

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Error al recuperar datos de fichero de texto con delimitadores
« Respuesta #4 en: 22 Enero 2019, 21:42 pm »

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
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Error al recuperar datos de fichero de texto con delimitadores
« Respuesta #5 en: 23 Enero 2019, 11:39 am »

Muestra a ver cómo lo has implementado y qué error te muestra :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
alpachino98

Desconectado Desconectado

Mensajes: 37


Valar Morghulis


Ver Perfil
Re: Error al recuperar datos de fichero de texto con delimitadores
« Respuesta #6 en: 24 Enero 2019, 01:35 am »

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:

Código:
#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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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,114 Último mensaje 23 Febrero 2014, 23:11 pm
por moikano→@
Guardar fichero de texto
Programación Visual Basic
BenRu 6 2,725 Último mensaje 20 Junio 2007, 21:59 pm
por BenRu
Error al leer un fichero de texto en Python « 1 2 »
Scripting
CaronteGold 17 11,955 Último mensaje 20 Diciembre 2010, 20:26 pm
por CaronteGold
2 delimitadores para obtener texto (vb.net)
.NET (C#, VB.NET, ASP)
<housedir> 4 5,784 Último mensaje 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,189 Último mensaje 22 Marzo 2014, 21:31 pm
por Debci
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines