UTNianos

Versión completa: Validaciones CMD
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola Utnianos, tengo una duda sobre las validaciones en programa comando dfe un programa en C.

Dejo el enunciado y el ejercicio resuelto. Por favor, se que es mucho pedir que me expliquen, pero si alguno podria explicarme se lo agradeceria bastante.

Enunciado:
Desarrolle un programa que recibe en línea de comandos un archivo archi.txt y una cadena de caracteres. El programa debe mostrar por stdout las lineas que comienzan con el primer carácter de la cadena dada. Ejemplo: si se ejecuta prog archi.txt “jose” debe mostrar las líneas de archi.txt que comienzan con 'j'.

Resolucion:
#include <stdio.h>
#define MAXLINEA 80

int main(int argc, char * argv[])
{
FILE * in;
char linea[MAXLINEA+1];

if ( argc == 1 )
{
printf("Debe escribir 2 Argumentos en Linea de Comandos\n");
return -1;
}

if ( argc != 3 )
{
printf("Numero incorrecto de Argumentos\n");
return -2;
}

in = fopen(argv[1], "r");
if ( in == NULL )
{
printf("Error al abrir archivo de Entrada\n");
return -3;
}

while ( fgets(linea, MAXLINEA, in) != NULL )
{
if ( linea[0] == argv[2][0] ) fputs(linea, stdout);
}

if ( ferror(in) )
{
printf("Error de Lectura\n");
return -5;
}
else
if ( feof(in) ) printf("Fin de Archivo de Entrada\n");

fclose(in);
}
¿Y qué es exactamente lo que querés que te expliquemos?

PD: Usá las etiquetas CODE.
Viendolo muuuuy por encima, no pareciera tener problemas. Se le podrían criticar cuestiones de estilo y blah, pero en principio la lógica del algoritmo pareciera estar bien.


Decís algo sobre las validaciones de un programa comando. ¿Te referís a las validaciones sobre argc?

Contanos un poco más, así te podemos dar una mano...
Se que no están acá para enseñar, solo dar una mano pero, no entiendo el porque del código.
No entiendo porque verifica a cada rato argc.
MAXLINEA ?


el profesor lo explico muy por encima, casi que lo memoricemos. Pero mas que nada quisiera saber el porque de las cosas antes que memorizar y después no acordarme porque.

Lamento pedirles una explicación. Muchas gracias por colaborar o interesarse.
MAXLINEA es una constante. Está definida ahí, y se usa para marcar cuántos caracteres debe leer del archivo.

argc es la cantidad de argumentos con que se llamó al programa. Si es 1, es porque se lo llamó sólo con el nombre del programa sin nada adicional. Ejemplo: supongamos que el programa se llama "ejercicio". En la línea de comandos lo ejecutás con "ejercicio" así solamente, entonces argc vale 1. Si lo ejecutás como "ejercicio arch.txt" es el caso "argc != 3". Si lo ejecutás como "ejercicio arch.txt lalala", es el caso que está bien.

argc es la cantidad de argumentos con los que se llamó al programa
*argv[] es un puntero a un array de cadenas que contiene los argumentos con los que se lo llamó.
Ah okei, ahi voy entendiendo. Una cosita mas y listo.

Que hacen las siguientes funciones?

fopen(lee el primer caracter?,se que la "r"es read, y la write) y se guarda en una variable puntero FILE ?
fgets(???)
ferror(archivo) ????
feof(archivo) si llego al fin de la cadena?
fclose(archivo) lo cierra.
fopen se encarga de abrir un archivo que vos le pases, el primer argumento es el path, o nombre del archivo (si esta en el mismo directorio), y el segundo es el modo en que lo vas a abrir. Lectura / escritura (hay varios tipos).

Y bueno, devuelve un FILE* asociado a ese archivo.
(28-06-2014 02:17)Harrier-GR7 escribió: [ -> ]Ah okei, ahi voy entendiendo. Una cosita mas y listo.

Que hacen las siguientes funciones?

fopen(lee el primer caracter?,se que la "r"es read, y la write) y se guarda en una variable puntero FILE ?
fgets(???)
ferror(archivo) ????
feof(archivo) si llego al fin de la cadena?
fclose(archivo) lo cierra.

fopen es lo que dijo Santi_Aguito.
fgets lee un string (f de file, get de get, s de string). Lo guarda en linea, lee MAXLINEA caracteres, lo lee del archivo in.
ferror se usa para saber si hubo algún error con el archivo, de lectura/escritura/lo que sea.
feof da true si llegó al fin *del archivo*
fclose cierra el archivo, efectivamente.
Muchisimas gracias, me aclararon muchisimo el panorama.

Que tengan buenas noches y suerte con los parciales y los finales =).
URLs de referencia