Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Lauta en 6 Octubre 2012, 17:39 pm



Título: [C++] Consulta - Usar entrada estándar o desde un archivo
Publicado por: Lauta en 6 Octubre 2012, 17:39 pm
Buenos días, tengo un trabajo práctico para hacer que necesito que, si me pasan un nombre de archivo, lo abra y lea de ahí y sino, que lea de la entrada estándar, la idea es usar la misma variable. En C era fácil, asignada stdin a un FILE*, pero en C++ tengo un ifstream* y no me deja asignarle la entrada estándar (cin), alguien sabe cómo se hace esto?

Muchas gracias!


Título: Re: [C++] Consulta - Usar entrada estándar o cin
Publicado por: Stakewinner00 en 6 Octubre 2012, 18:20 pm
prueba esto

espero qeu te sirva

Código
  1.  
  2. #include <iostream>
  3. #include <fstream>
  4. using namespace std;
  5.  
  6.  
  7. int main (int argc, char *argv[]) {
  8.  char c, str[256];
  9.       ifstream arc;
  10.  cout << "Nombre del archivo: ";
  11. cin.getline (str,256);
  12.  
  13.  arc.open (str);      
  14.  while (arc.good())  
  15.  {
  16.  
  17.  
  18.     c = arc.get();
  19.    if (arc.good())
  20.  
  21.      cout << c;
  22.  
  23.  }
  24. flse:
  25.  
  26.  
  27.  return 0;
  28. }


Título: Re: [C++] Consulta - Usar entrada estándar o desde un archivo
Publicado por: Lauta en 6 Octubre 2012, 20:03 pm
Pero eso es lectura desde el archivo directamente, si no entendí mal el código.

Lo que quiero hacer es tener una variable a la que le pueda asignar un archivo de entrada o CIN, entonces después puedo llamar a una función que tome la entrada independientemente de si es un archivo normal o la entrada estándar, algo así:

Código
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. int main (int argc, char *argv[]) {
  5.  ifstream* archivoEntrada;
  6.  if (argc > 2) {
  7.    archivoEntrada = new ifstream(argv[1]);
  8.  }else {
  9.    archivoEntrada = std::cin;
  10.  }
  11.  
  12.  leerLinea(archivoEntrada);
  13.  
  14.  return 0;
  15. }
  16.  


Título: Re: [C++] Consulta - Usar entrada estándar o desde un archivo
Publicado por: Stakewinner00 en 6 Octubre 2012, 20:07 pm
as compilado el codigo?

lo que hace este codigo es lo siguiente

Código:
Microsoft Windows [Versión 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Reservados todos l

C:\Users\David\Desktop>g++ z.cpp //Compilo el codigo

C:\Users\David\Desktop>a //Lo ejecuto
Nombre del archivo: z.cpp //Le indico un archivo (en este caso el que compile)
//Y lee el archivo
#include <iostream>
#include <fstream>
using namespace std;


int main (int argc, char *argv[]) {
  char c, str[256];
       ifstream arc;
  cout << "Nombre del archivo: ";
cin.getline (str,256);

  arc.open (str);
  while (arc.good())
  {


     c = arc.get();
    if (arc.good())

      cout << c;

  }
flse:


  return 0;
}
C:\Users\David\Desktop>


Título: Re: [C++] Consulta - Usar entrada estándar o desde un archivo
Publicado por: Lauta en 6 Octubre 2012, 20:27 pm
Nop, que es lo de flse?


Título: Re: [C++] Consulta - Usar entrada estándar o desde un archivo
Publicado por: Stakewinner00 en 6 Octubre 2012, 20:47 pm
Nop, que es lo de flse?

es un label de un goto que borre. Y se quedo allí, no me di cuenta



Título: Re: [C++] Consulta - Usar entrada estándar o desde un archivo
Publicado por: Lauta en 6 Octubre 2012, 22:24 pm
Ahí lo compilé, definitivamente no es lo que necesito. Esto es lo que necesito:

Lo que quiero hacer es tener una variable a la que le pueda asignar un archivo de entrada o CIN, entonces después puedo llamar a una función que tome la entrada independientemente de si es un archivo normal o la entrada estándar, algo así:

Código
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. int main (int argc, char *argv[]) {
  5.  ifstream* archivoEntrada;
  6.  if (argc > 2) {
  7.    archivoEntrada = new ifstream(argv[1]);
  8.  }else {
  9.    archivoEntrada = std::cin;
  10.  }
  11.  
  12.  leerLinea(archivoEntrada);
  13.  
  14.  return 0;
  15. }
  16.  


Título: Re: [C++] Consulta - Usar entrada estándar o desde un archivo
Publicado por: Stakewinner00 en 6 Octubre 2012, 23:18 pm
pues no entendi lo k querias.


Título: Re: [C++] Consulta - Usar entrada estándar o desde un archivo
Publicado por: Lauta en 7 Octubre 2012, 08:02 am
Pongo el ejemplo que digo que hice en C:

Código
  1. if (argc > 1) {
  2. archivoEntrada = fopen(argv[1], "r");
  3. } else {
  4. archivoEntrada = stdin;
  5. }
  6.  

Si me pasan el argumento por consola, abro el archivo, sino, asigno la entrada estándar, pero siempre uso la misma variable.

En caso que a alguien le pase lo mismo:

Código
  1. std::istream* archivoEntrada;
  2.  
  3. if (nomArchEntrada.compare("-") == 0) {
  4. archivoEntrada = &std::cin;
  5. }else {
  6. archivoEntrada->open(nomArchEntrada.c_str(), std::ios::in);
  7. }
  8.