Foros del Web » Programación para mayores de 30 ;) » Programación General »

Intento implementar la función grep de unix

Estas en el tema de Intento implementar la función grep de unix en el foro de Programación General en Foros del Web. Por favor, tengo que completar una práctica muy importante, y he hecho todas las funciones que me pedían menos la "grep" de UNIX (grep cadena ...
  #1 (permalink)  
Antiguo 29/03/2006, 06:34
 
Fecha de Ingreso: marzo-2006
Mensajes: 5
Antigüedad: 18 años, 7 meses
Puntos: 0
Intento implementar la función grep de unix

Por favor, tengo que completar una práctica muy importante, y he hecho todas las funciones que me pedían menos la "grep" de UNIX (grep cadena archivo: Muestra todas las líneas de archivo que contienen cadena).

Lo que pretendo es que esta función grep pueda ser imitada por ejemplo en ms-dos. El código que tengo de momento lo pongo acontinuación, pero me da error de segmentación ¿Alguien me podría ayudar?

Muchas gracias por adelantado.


- Abel -


#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]){

FILE *punteroarchivo;
char *linea[100]; /*Linea a evaluar*/
char caracter;
int lineas;
int indice;

if(argc<2){
fprintf(stderr,"Formato: grep cadena archivo\n");
return 1;
}
if((punteroarchivo=fopen(argv[2],"r"))==NULL){
fprintf(stderr, "No se pudo abrir fichero %s\n",argv[2]);
}
else {

while((caracter=getc(punteroarchivo))!=EOF){ /*Contamos el numero de lineas del fichero*/
if(caracter=='\n')
lineas++;
}

fclose(punteroarchivo);

punteroarchivo=fopen(argv[2],"r");

for(indice=0;indice<lineas;indice++){

fgets(linea[indice],100,punteroarchivo);

while(strcmp(argv[1],linea[indice])) { /*...evaluacion de la cadena*/

fputs(linea[indice],punteroarchivo);

}
}
fclose(punteroarchivo);

}
return 0;
}
  #2 (permalink)  
Antiguo 29/03/2006, 06:59
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Haces fgets usando como parámetro la variable "char *linea[100]", la cual está sin inicializar: no has reservado memoria.
  #3 (permalink)  
Antiguo 29/03/2006, 15:35
 
Fecha de Ingreso: marzo-2006
Mensajes: 5
Antigüedad: 18 años, 7 meses
Puntos: 0
¿Como hago para reservar esa memoria?

¿Como hago para reservar la memoria? ¿con malloc()? Es que no se utilizar bien lo de la memoria dinámica...
  #4 (permalink)  
Antiguo 29/03/2006, 16:53
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Primero deberías encontrar cuántas líneas tiene, para después reservar la memoria total, y sí, con malloc() y free(). Pero te recomiendo que en vez de eso, les y compares las cadenas del archivo directamente, sin meterlas en memoria.
  #5 (permalink)  
Antiguo 29/03/2006, 17:37
 
Fecha de Ingreso: marzo-2006
Mensajes: 5
Antigüedad: 18 años, 7 meses
Puntos: 0
Leer Cadenas

De acuerdo, lo que me quieres decir es que lea linea por linea y en cada linea compare si contiene la cadena. Lo que no se es como hacer para leer linea a linea y compararlo con la cadena :S Muchas Gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:30.