Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DarkSorcerer en 1 Septiembre 2013, 05:58 am



Título: Como enviar un fichero como parametro en C++
Publicado por: DarkSorcerer en 1 Septiembre 2013, 05:58 am
Hola gente, soy novato en C++, me gustaría que me pudieran ayudar a como mandar por parametro un fichero que abro desde el main.
Lo que quiero es abrir el fichero desde el main, primero comprobar si todo marcha bien, si el fichero no se abrio, el programa avisa que fallo, de lo contrario, manda como parametro a una funcion que se encargara de leer el fichero dentro de un ciclo infinito hasta que no haya mas que extraer del archivo. El fichero tiene este formato

palabra1,palabra2,palabra3,..................................,palabraN

y quiero imprimir cada palabra x cada linea, por eso use getline(fichero,palabra,',');

Pero me salio un error gigante y no pudo funcionar como queria

Les dejo el codigo, estoy usando NetBeans 7.3

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. void leerFichero(ifstream fichero){
  9.  
  10.    string palabra;
  11.  
  12.    while(!fichero.eof()){
  13.  
  14.        getline(fichero,palabra,',');
  15.        cout <<palabra;
  16.  
  17.    }
  18.  
  19. }
  20.  
  21. int main(int argc, char** argv) {
  22.  
  23.    ifstream fichero("personal.txt");
  24.  
  25.    if(fichero.is_open()){
  26.  
  27.        leerFichero(fichero);
  28.  
  29.    }else{
  30.  
  31.        cout <<"\nNo se pudo abrir el fichero";
  32.  
  33.    }
  34.  
  35.    return 0;
  36. }
  37.  
  38.  


Título: Re: Como enviar un fichero como parametro en C++
Publicado por: eferion en 1 Septiembre 2013, 11:29 am
"fichero" es un objeto de tipo "ifstream". El problema que tienes es que getline no es una función válida como tal. Tu quieres hacer "fichero.getline".

Código
  1.    char palabra[50];
  2.  
  3.    while(!fichero.eof()){
  4.  
  5.        fichero.getline(palabra, 50, ',');
  6.        cout <<palabra;
  7.  
  8.    }

Como has podido comprobar, palabra no puede ser un string, la interfaz getline de ifstream no tiene ninguna sobrecarga que admita un string, tiene que ser un array de tipo char.


Título: Re: Como enviar un fichero como parametro en C++
Publicado por: amchacon en 1 Septiembre 2013, 12:34 pm
"fichero" es un objeto de tipo "ifstream". El problema que tienes es que getline no es una función válida como tal.
getline también puede usarse como una función, con sobrecarga para strings:
http://www.cplusplus.com/reference/string/string/getline/

El error está en que estás haciendo una copia del fichero para pasarlo a la función, tienes que pasarlo por referencia:

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. void leerFichero(ifstream &fichero){
  9.  
  10.   string palabra;
  11.  
  12.   while(!fichero.eof()){
  13.  
  14.       getline(fichero,palabra,',');
  15.       cout <<palabra;
  16.  
  17.   }
  18.  
  19. }
  20.  
  21. int main(int argc, char** argv) {
  22.  
  23.   ifstream fichero("personal.txt");
  24.  
  25.   if(fichero.is_open()){
  26.  
  27.       leerFichero(fichero);
  28.  
  29.   }else{
  30.  
  31.       cout <<"\nNo se pudo abrir el fichero";
  32.  
  33.   }
  34.  
  35.   return 0;
  36. }