[C++] Consulta - Usar entrada estándar o desde un archivo

Iniciado por Lauta, 6 Octubre 2012, 17:39 PM

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

Lauta

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!
TODOS LOS MANUALES DE PROGRAMACION!!!

Quieres ganar dinero? Clickea en alguno de los enlaces y empieza ya!!!
Daddybux
Bux.to
Adverbux
Dailyclick

Stakewinner00

prueba esto

espero qeu te sirva

Código (cpp) [Seleccionar]


#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;
}

Lauta

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 (cpp) [Seleccionar]

#include <iostream>
#include <fstream>

int main (int argc, char *argv[]) {
  ifstream* archivoEntrada;
  if (argc > 2) {
    archivoEntrada = new ifstream(argv[1]);
  }else {
    archivoEntrada = std::cin;
  }

  leerLinea(archivoEntrada);

  return 0;
}
TODOS LOS MANUALES DE PROGRAMACION!!!

Quieres ganar dinero? Clickea en alguno de los enlaces y empieza ya!!!
Daddybux
Bux.to
Adverbux
Dailyclick

Stakewinner00

as compilado el codigo?

lo que hace este codigo es lo siguiente

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>


Lauta

TODOS LOS MANUALES DE PROGRAMACION!!!

Quieres ganar dinero? Clickea en alguno de los enlaces y empieza ya!!!
Daddybux
Bux.to
Adverbux
Dailyclick

Stakewinner00

Cita de: Lauta en  6 Octubre 2012, 20:27 PM
Nop, que es lo de flse?

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


Lauta

Ahí lo compilé, definitivamente no es lo que necesito. Esto es lo que necesito:

Cita de: Lauta en  6 Octubre 2012, 20:03 PM
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 (cpp) [Seleccionar]

#include <iostream>
#include <fstream>

int main (int argc, char *argv[]) {
  ifstream* archivoEntrada;
  if (argc > 2) {
    archivoEntrada = new ifstream(argv[1]);
  }else {
    archivoEntrada = std::cin;
  }

  leerLinea(archivoEntrada);

  return 0;
}

TODOS LOS MANUALES DE PROGRAMACION!!!

Quieres ganar dinero? Clickea en alguno de los enlaces y empieza ya!!!
Daddybux
Bux.to
Adverbux
Dailyclick

Stakewinner00


Lauta

#8
Pongo el ejemplo que digo que hice en C:


if (argc > 1) {
archivoEntrada = fopen(argv[1], "r");
} else {
archivoEntrada = stdin;
}


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 (cpp) [Seleccionar]

std::istream* archivoEntrada;

if (nomArchEntrada.compare("-") == 0) {
archivoEntrada = &std::cin;
}else {
archivoEntrada->open(nomArchEntrada.c_str(), std::ios::in);
}
TODOS LOS MANUALES DE PROGRAMACION!!!

Quieres ganar dinero? Clickea en alguno de los enlaces y empieza ya!!!
Daddybux
Bux.to
Adverbux
Dailyclick