- Code: Select all
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#define rozmiar 35000
int opcje = 0;
int bez_pliku = 0;
Ustawia globalne opcje
void ustaw_opcje(char c)
{
switch(c)
{
case 'n':
opcje = 1;
break;
default:
printf("\ngrep: Nieprawidlowe opcje -- %c\n",c);
printf("Uzyj: nazwa_programu -n wzorzec nazwa pliku. . .\n");
exit(0);
break;
}
}
int wyszukaj_ciag(char *linia, char *wzorzec) {
int i,j;
int len_txt = strlen(linia);
int len_wz = strlen(wzorzec);
for(i=0; i<=len_txt-len_wz; i++) {
for(j=0; j<len_wz; j++) {
if(linia[i+j]!=wzorzec[j])
break;
}
if(j==len_wz)
return i;
}
return -1;
}
void wyszukaj_plik(char *nazwa_pliku, char *wzorzec,int temp_opcje)
{
FILE *fp;
char linia[rozmiar];
char *uzywana_linia;
int i;
int line_no = 0;
if((fp = fopen(nazwa_pliku,"r"))=='\0')
{
printf("Nie można otworzyć %s\n",nazwa_pliku);
exit(0);
}
while(fgets(linia,rozmiar,fp))
{
uzywana_linia =linia;
line_no++;
switch(opcje)
{
case 1:
if((wyszukaj_ciag(uzywana_linia,wzorzec))!=-1)
{
if(bez_pliku == 1)
printf("%d:%s",line_no,linia);
else
printf("%s:%d:%s",nazwa_pliku,line_no,linia);
}
break;
}
}
}
int main(int argc,char*argv[])
{
float s;
char *wyszukaj_ciag;
char *nazwa_pliku;
int index = 1;
int i = 0;
printf("Uzyj: nazwa_programu -n wzorzec nazwa pliku. . .\n");
if(argc<2)
{
printf("Za malo argumentow\n");
return 0;
}
if(argv[index][0]== '-')
{
ustaw_opcje(argv[index][1]);
++index;
bez_pliku = argc - 3;
}
else
bez_pliku = argc - 2;
wyszukaj_ciag = argv[index];
for(i=0;argv[++index]!= NULL;i++)
{
nazwa_pliku = argv[index];
wyszukaj_plik(nazwa_pliku,wyszukaj_ciag,opcje);
}
return 0;
}
