/* program extrahuj v1.0 */ #include int strPos(char *radek, char *retezec) { /* zjisti zda retezec 'radek' obsahuje podretezec 'retezec' */ int i, j; for (i = 0; radek[i]; i ++) // projdi cely radek, az narazis na nulu for (j = 0; radek[i+j] == retezec[j]; j ++) { // prochazej soubezne retezec i radek, dokud se znaky rovnaji if (!radek[i+j+1]) break; // neni dalsi znak jiz konec retezce 'radek'? if (!retezec[j+1]) return 1; // dalsi znak konec retezce 'retezec' znaci, ze byl nalezen podretezec => vrat true } return 0; // hledani se nezdarilo => vrat false } int main(int argv, char *argc[]) { FILE *in, *out; char *retezec, // retezec zadany v parametrech radek[256]; // radek nacteny ze souboru 'out' int c, i; if (argv != 4) { // jsou zadany parametry? printf("Chybne parametry. Zadej:\n\textrahuj [zdroj] [cil] retezec\n"); return 0; } if (!(in = fopen(argc[1], "rt"))) { // existuje vstupni soubor? printf("Chybne zadany vstupni soubor\n"); return 0; } if (!(out = fopen(argc[2], "wt"))) { // podarilo se vytvorit vystupni soubor? printf("Chybne zadany vystupni soubor\n"); return 0; } if (!argc[3][0]) { // prvni znak retezce nesmi byt nula => prazdny retezec printf("Nesmite zadat prazdny retezec\n"); return 0; } retezec = argc[3]; i = 0; while ((c = fgetc(in)) != EOF) { // nacitej po jednom znaku ze souboru az do konce souboru if ((i < 256) && (c != '\n')) radek[i] = c; // kdyz nacteny znak neni konec radky a nahodou neni radka delsi nez 256 znak, pak znak uloz do pole else { // nastal konec radky radek[i] = 0; // posledni znak radky ukoncuje retezec if (strPos(radek, retezec)) fprintf(out, "%s\n", radek); // zkontroluj zda nacteny radek obsahuje hledany retezec - pokud ano, pak vypis radek do souboru 'out' i = -1; // nastav citac } i ++; } fclose(in); fclose(out); return 1; }