/* --------------------------------------------------- */ /* --- Filtrovanie suboru --- */ /* --------------------------------------------------- */ /* --------------------------------------------------- zapocet z C pre 3MI december 1996 --------------------------------------------------- Uloha c.1: ---------- - upravte program tak, aby pri "roznych chybach" bola vysledok funkcie main() rozny; (kody chyb si zvolte sami) (napr: chyba pri otvoreni vstupneho suboru -> -2; chyba pri citani -> -4; ...) Uloha c.2: ---------- - upravte program tak, aby si zo standardneho vstupu nacital "filtrovaci retazec" (do vystupu zapise len tie znaky ktore sa nebudu nenachadzat v tomto retazci) --------------------------------------------------- */ #include #include #include /* --- urcuje ci sa znak 'c' ma zapisat do vystupu (0 -> znak sa nezapise, !=0 -> znak sa zapise) --- */ int filter(int c); int main(int argc, char * argv[]) { /* --- Deklaracia premmenych --- */ int c; int ret_value; FILE * input, * output; if (argc <= 1) { /* --- ak nemame dost zadanych argumentov tak koniec --- */ printf("Potrebujem aspon jeden argument !\n"); return -1; } else if (argc <= 2) { /* a sucasne nie je <= 1*/ /* --- otvor subor zadany z prikazoveho riadku na citanie --- */ argc--; argv++; input = fopen(argv[0], "r"); if (!input) { printf("Nemozem nasjst, alebo otvorit zadany subor !\n"); return -1; } /* --- vystup posli na stdout --- */ output = stdout; } else { /* --- otvor prvy subor zadany z prikazoveho riadku na citanie --- */ argc--; argv++; input = fopen(argv[0], "r"); if (!input) { printf("Nemozem najst, alebo otvorit vstupny subor !\n"); return -1; } /* --- a druhy pre zapis --- */ output = fopen(argv[1], "w"); if (!output) { if (input != stdin) fclose(input); printf("Nemozem najst, alebo otvorit vystupny subor !\n"); return -1; } } ret_value = 0; while ((c = fgetc(input)) != EOF) { if (filter(c)) { if (fputc(c, output) == EOF) { printf("Chyba pri zapise do suboru !\n"); ret_value = -1; } } } /* --- nevratil fgetc EOF preto, ze nastala nejaka chyba ? --- */ if (ferror(input)) { printf("Chyba pri citani suboru !\n"); ret_value = -1; } /* --- uzavriet vstupny subor --- */ fclose(input); /* --- ak bol vystup pisany do suboru treba ho zavriet --- */ if (output != stdout) if (fclose(output)) { printf("Nemozem dokoncit vystup !\n"); ret_value = -1; } /* --- treba vratit vysledok cinnosti programu --- */ return ret_value; } /* --- urcuje ci sa znak 'c' ma zapisat do vystupu --- */ int filter(int c) { return (c != '@'); }