Pre načítanie celého súboru pomocou metódy LoadFromFile() nám stačí jeden jediný riadok, ktorý vykoná všetko potrebné. Ostatné len ošetria otvorenie pomocou komponenty OpenDialog.
void __fastcall TForm1::NacitajClick(TObject *Sender)
{
AnsiString cesta;
if(OpenDialog1->Execute()){
cesta = OpenDialog1->FileName;
Memo1->Lines->LoadFromFile(cesta);
}
} Nasledujúca riadka kódu - cesta = OpenDialog1->FileName; priraďuje premennej typu AnsiString –cesta, meno a cestu k súboru, pomocou odkazu na parameter komponenty OpenDialog. Nasledujúci program nám vypíše obsah súboru do komponenty Memo. Tento program, pozostávajúci vlastne z troch riadkov nám umožňuje načítať akýkoľvek txt súbor do komponenty Memo. Avšak, ako som už spomínal, ak by sme chceli načítavať fragmenty súboru a vypisovať do tabuľky a pracovať s nimi, metódou LoadFromFile() to nedosiahneme.
Súborová podpora starým spôsobom sa nazýva načítavanie a práca so súbormi pomocou nasledujúcich definícii.
Otvorenie súboru:
FILE *f; //definovanie pointra typu FILE
f = fopen(vstup.txt, "r"); //otvorenie konkrétneho súboru vstup.txt pre // operáciu čítanie Posledný parameter v zátvorke - "r" nie je jediným, ktorý sa dá používať pri tejto deklarácii. Poznáme 6 druhov parametrov, ktoré nám určujú, aké operácie sa budú so súborom vykonávať.
| r | Umožňuje iba čítanie |
| w | Umožňuje zápis, ak existuje taký súbor bude prepísaný |
| a | Bude sa zapisovať na koniec súboru, teda dopisovať |
| r+ | Súbor sa bude updatovať, teda aj dopisovať aj čítať. |
| w+ | Vytvorí súbor pre čítanie a zapisovanie teda updatovanie, ak neexistuje vytvorí sa |
| a+ | Otvorí, alebo vytvorí súbor pre updatovanie na konci súboru. |
Načítavanie sa vykonáva vo veľkej väčšine prípadov pomocou cyklu. Pomocou týchto metód môžeme načítavať časti súboru po ľubovoľných veľkostiach napr. po jednom znaku po jednom slove, jeden riadok a podobne.
Načítanie jedného riadku:
fgets(pole,200,f); pole – je premenná, do ktorej zapisujeme, ide o pole znakov, jej použitiu predchádza jej deklarácia. Zadeklarujeme si teda premennú char pole[200], pretože nepredpokladáme, že by mal jeden riadok viac ako 200 znakov.
Načítanie určeného počtu znakov, reťazca:
fscanf(f,"%[1]",pole); načítava po jednom znaku
fscanf(f,"%s",pole); načítava po reťazcoch, teda slovách fscanf(f,"%c",pole); načítava po jednom znaku, nie čísle
fscanf(f,"%d",pole); načítava čísla typu int Niekoľko príkladov na to, ako si môžeme určiť po akých blokoch dát chceme načítavať. Prvý parameter – f určuje, súbor s ktorým pracujeme v tomto prípade pracujeme s premennou typu FILE – f. Posledný parameter je premenná, do ktorej budeme zapisovať načítané dáta. V tomto prípade je to naše známe pole. Prvá uvedená možnosť sa dá špecifikovať aj tak, že v zátvorkách [] bude hocijaké číslo, ktoré nám bude udávať maximálnu dĺžku načítavaných reťazcov.
Metóda na zistenie konca súboru:
Metóda fscanf a fgetc vracia na konci súboru tzv. hodnotu EOF. AK chceme načítavať až po koniec súboru, stačí vytvoriť program takéhoto vzhľadu:
{
int cislo;
while(fscanf(f,”%d”, &cislo != EOF)){
Memo1->Lines->Add(IntToStr(cislo));
}
} Nabudúce si ukážeme, ako sa zapisuje do súboru a aké metódy sa využívajú pri načítavaní do štruktúry a podobné finty.