#include#include <stdio.h> #include <string.h> #include <ctype.h> #define DELKA_RADKU 128 #define DELKA_JMENA 12 /** * Funkce ze znakoveho retezce odstrani pravostranne "bile" znaky * * @param[in, out] d znakovy retezec - i. e. ukazatel na zacatek pameti, kde je ulozen * @return hodnotu NULL, pokud je parametr d NULL; jinak ukazatel na zadany znakovy retezec */ char *oriznoutVpravo(char *d); void excerptName(char *jmeno, char *fiNa); /** * Funkce ze znakoveho retezce odstrani pravostranne "bile" znaky * * @param[in, out] jmeno znakovy retezec - i. e. ukazatel na zacatek pameti, kam se ulozi prefix po znak '_' z fiNa * @param[in] fiNa znakovy retezec - i. e. ukazatel na zacatek pameti, kde je ulozen nazev souboru */ /** * Funkce ze znakoveho retezce odstrani pravostranne "bile" znaky * * @param[in] fileName nazev vstupniho souboru * @param[in] d znakovy retezec - i. e. ukazatel na zacatek pameti, kde je ulozen * @param[in] neZacatek 0, pokud je zacatek - neodradkuje se na zacatku vystupniho souboru; * nenula => odradkuje se pred jmenem osoby * @return EXIT_FAILURE, pokud se neotevrel nektery vstupni (textovy) soubor; jinak EXIT_SUCCESS */ int osobaAJejiText(char *fileName, int neZacatek, FILE *output); int main() { FILE *vystup; int rtn; char nazevVystupnihoSouboru[DELKA_RADKU], nazevVstupnihoSouboru[DELKA_RADKU]; printf("Zadejte jmeno primarniho vstupniho textoveho souboru: "); fgets(nazevVstupnihoSouboru, DELKA_RADKU, stdin); oriznoutVpravo(nazevVstupnihoSouboru); printf(" Zadejte jmeno vystupniho textoveho souboru: "); fgets(nazevVystupnihoSouboru, DELKA_RADKU, stdin); oriznoutVpravo(nazevVystupnihoSouboru); if (!(vystup = fopen(nazevVystupnihoSouboru, "w"))) { printf("Nepodarilo se otevrit vystupni soubor \"%s\".\n", nazevVystupnihoSouboru); return EXIT_FAILURE; } rtn = osobaAJejiText(nazevVstupnihoSouboru, 0, vystup); fclose(vystup); return rtn; } char *oriznoutVpravo(char *d) { char *p; if (d) { p = d + strlen(d) - 1; while (isspace(*p)) { --p; } *(p + 1) = '\0'; } return p; } void excerptName(char *jmeno, char *fiNa) { char *p; p = strchr(fiNa, '_'); strncpy(jmeno, fiNa, p - fiNa); *(jmeno + (p - fiNa)) = '\0'; } int osobaAJejiText(char *fileName, int neZacatek, FILE *output) { char osoba[DELKA_JMENA], radek[DELKA_RADKU]; FILE *vstup; int osobaPoprve, rtn; excerptName(osoba, fileName); if ((vstup = fopen(fileName, "r"))) { rtn = EXIT_SUCCESS; } else { printf("Nepodarilo se otevrit vstupni soubor \"%s\".\n", fileName); return EXIT_FAILURE; } osobaPoprve = 1; while (fgets(radek, DELKA_RADKU, vstup)) { if ((*radek == '>') && (*(radek + 1) == '>') && (*(radek + 2) == ' ')) { oriznoutVpravo(radek + 3); rtn = osobaAJejiText(radek + 3, 1, output); osobaPoprve = 1; } else { if (osobaPoprve) { if (neZacatek) { fputc('\n', output); fputc('\n', output); } else { neZacatek = 1; } fputs(osoba, output); fputc('\n', output); fputc('\n', output); osobaPoprve = 0; } fputs(radek, output); } } fclose(vstup); return rtn; }