Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/05/2013, 20:25
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Obtener entrada de un archivo por linea de comandos

Como no se si es C o C++ voy a poner un ejemplo en C.


Cuando usas:
Código:
programa.exe < archivo.txt
Lo que haces es mandar archivo.txt por el stdin.

Voy a explicarlo de manera rapida:
Un programa tiene 3 archivos por default: stdin (Standar Input<->Entrada Estandar), stdout (Standar Output<->Salida Estandar) y stderr (Standar Error<->Error Estandar). Por defecto, funciones como getchar, scanf trabajan sobre stdin, lo mismo con printf trabaja sobre stdout.

Cuando haces mi_programa.exe < archivo.txt lo que haces es que el contenido de archivo.txt vaya a stdin.

Igual que cuando haces mi_programa.exe > archivo.txt lo que haces es redireccionar stdout a archivo.txt

Sobre args y argv, solamente son 2 parámetros que recibe main, el primero indicando el numero de parámetros y el segundo el arreglo de parámetros (en este caso un arreglo de cadenas).

Dependiendo de tu IDE lo puedes configurar para redirigir stdin y stdout a un archivo.


Aquí te dejo un ejemplo:
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main(int argv, char **args) {
  4.  
  5.   int i;
  6.   char line[100];
  7.  
  8.   printf("INICIO DE ARGUMENTOS DEL PROGRAMA\n");
  9.   for(i = 0; i < argv; i++)
  10.     printf("%s\n", args[i]);
  11.   printf("FIN DE ARGUMENTOS DEL PROGRAMA\n");
  12.   printf("\n");
  13.  
  14.  
  15.   printf("INICIO LECTURA DE STDIN\n");
  16.   while(fgets(line, 100, stdin) != NULL) {
  17.     printf("%s", line);
  18.   }
  19.   printf("FIN DE LECTURA DE STDIN\n");
  20.  
  21.   return 0;
  22.  
  23. }

Puedes correrlo como:
Código:
programa.exe arg1 arg2 arg3 < archivo.txt
Ver los resultados y ver el código.