NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Čítanie špecifického riadku zo súboru

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
rosina.jakub
Člen
Avatar
rosina.jakub:6.11.2017 18:47

Ahojte,
potrebujem poradiť. Nejakým spôsobom potrebujem dosiahnuť čítanie riadkov zo súboru. Postupne ako to ide potrebujem prvý a potom každý 7 riadok prečítať a napísať pred neho napr. "A". Druhý riadok a znova každý 7, potrebujem dať "B", atď...
Napadlo ma to spraviť nejakým počítadlom a kontrolovať na ktorom som riadku. Pomocou fscanf to nefunguje, vypíše celý súbor.
Ďakujem za pomoc

 
Odpovědět
6.11.2017 18:47
Avatar
Odpovídá na rosina.jakub
Matúš Olejník:6.11.2017 20:12

Predpokladám, že ak spracuješ siedmy riadok a všetky jeho násobky tak už ďalej nebudeš prepisovať upravené riadky, ak hej tak to bude treba poupraviť. (kontrolu otvorenia, zatvorenia súboru, vstupu... som vynechal). fgets číta dokiaľ nenarazí na nový riadok alebo koniec súboru alebo kým nenaplní buffer.

#define BUFFER_SIZE 255

int main() {
        FILE* inputFile;
        FILE* outbuptFile;

        char lineBuffer[BUFFER_SIZE];
        char startLetter[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
        int lineCount = 0;

        inputFile = fopen("input.txt", "r");
        outbuptFile = fopen("output.txt", "w");

        //prve miesto si necham pre zaciatocne pismeno
        while (fgets(lineBuffer + 1, BUFFER_SIZE - 1, (FILE*)inputFile)) {
                //na zaciatok vlozim pismeno podla toho kolky je riadok
                *(lineBuffer) = startLetter[lineCount % 7];

                //do vysledneho suboru zapisem cely upraveny riadok
                fprintf((FILE*)outbuptFile, lineBuffer);

                //zvysim pocitadlo riadkov
                lineCount++;
        }

        fclose(inputFile);
        fclose(outbuptFile);

        return 0;
}
Editováno 6.11.2017 20:12
Nahoru Odpovědět
6.11.2017 20:12
/* I am not sure why this works but it fixes the problem */
Avatar
rosina.jakub
Člen
Avatar
rosina.jakub:8.11.2017 13:48

Ďakujem. Ja som si to spravil nakoniec takto

FILE *p_file;
        p_file = fopen("predaj.txt", "r");
        if (p_file == NULL) {
                printf("Neotvoreny subor\n");
                return NULL;
        }
        char riadok[50];
        int i = 1;
        while ((fgets(riadok, sizeof(riadok), p_file))) {
                switch (i) {
                        case 1:
                                printf("meno priezvisko: %s", riadok);
                                break;
                        case 2:
                                printf("SPZ: %s", riadok);
                                break;
                        case 3:
                                printf("typ auta: %s", riadok);
                                break;
                        case 4:
                                printf("cena: %s", riadok);
                                break;
                        case 5:
                                printf("datum: %s", riadok);
                                i = 0;
                                printf("\n");
                                break;
                }
                i++;
        }
 
Nahoru Odpovědět
8.11.2017 13:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.