E-gradiva > Računalništvo > Programiranje > Načrtovanje in razvoj programskih aplikacij > Vhodno-Izhodni tokovi > Podatkovne zbirke > Datoteke z zaporednim dostopom

Prijava

Datoteke z zaporednim dostopom

 

 

V datotekah z zaporednim dostopom lahko beremo samo zlog po zlog. Velikost in obliko zloga definira programer sam.

 

Preden datoteko želimo uporabiti, jo moramo odpreti. To storimo s klicem metode open, ali s pomočjo uporabe konstruktorja.

 

 

Primer:

ofstream izhodna_datoteka;
izhodna_datoteka.open("izhodna.dat");

 

ali

 

ofstream izhodna_datoteka("izhodna.dat");

 

Ko dostopa do datoteke ne potrebujemo več jo zapremo z ukazom:

 

izhodna_datoteka.close();

 

Privzeti argumenti konstruktorja in metode open() nastavijo drugi in tretji argument na privzete vrednosti. Če nam te ne ustrezajo, jih lahko spremenimo na naslednje vrednosti:

 

ios::in odpremo datoteko za branje
ios::out odpremo datoteko za pisanje
ios::ate

odpremo datoteko za dodajanje (podatki se prvič dodajo na začetek datoteke, v naslednjih zapisovanjih pa na mesto, kamor kaže kazalec

ios::app

odpremo datoteko za dodajanje (podatki se zmeraj dodajajo na konec)

ios::trunc

pri odpiranju se najprej izbriše vsebina datoteke

ios::nocreate

odpiranje uspe samo, če datoteka že obstaja

ios::noreplace

odpiranje uspe samo, če datoteka še ne obstaja

 

 

Za pozicioniranje kazalca uporabimo metode seekg ali seekp. Obe metodi imata isti pomen, le da je prva definirana za vhodne podatkovne tokove, druga pa za izhodne podatkovne tokove. Metoda ima dva parametra: prvi parameter pove število zlogov, za koliko se naj kazalec v datoteki premakne, drugi parameter pa pove , od kod se naj začne šteti pomik. Na voljo imamo naslednje možnosti:

 

 

Primera:

 

datoteka.seekg(0);

datoteka.seekg(20,ios::cur);

 

 

Primer:

V naslednjih primerih bomo tvorili oz. izpisovali podatke iz datoteke oseb. Zapis datoteke  je sestavljen iz priimka, številke računa in stanja na računu.

 

 

  1. //Tvorjenje datoteke z zaporednim dostopom
    #include <iostream>
    #include <fstream.h>

    #include <stdlib.h>
    using namespace std;

    int
    main()
    {

    ofstream izh_zbirka_strank("stranke.dat", ios::out);

    if
    (!izh_zbirka_strank)
    {

    cerr << "Zbirke ni moc odpreti" << endl;

    exit(1); // prototip v stdlib.h
    }

    cout << "Vnesi stevilko racuna, priimek in stanje." << endl << "Vnesi EOF za konec." << endl << "? ";

    int
    racun;
    char
    priimek[10];
    float
    stanje;

    while
    (cin >> racun >> priimek >> stanje) {

    izh_zbirka_strank << racun << " " << priimek << " " << stanje << endl;

    cout << "? ";
    }


    return
    0;
    }

  2. //Izpis datoteke z zaporednim dostopom
    #include <iostream>
    #include <fstream.h>

    #include <iomanip.h>
    using namespace std;

    void
    izpisi_vrsto(int rac, char *priimek, float sta)
    {


    cout << rac << ", " << priimek << ", " << sta << ", " << endl;
    }


    main
    ()
    {

    ifstream vho_zbirka_strank("stranke.dat", ios::in);

    if
    (!vho_zbirka_strank) {

    cerr << "Zbirke ni moc odpreti" << endl;
    exit(1);
    }



    int
    racun;
    char
    priimek[10];
    float
    stanje;

    cout << "Racun, " << "Priimek, " << "Stanje" << endl;

    while
    (vho_zbirka_strank >> racun >> priimek >> stanje)

    izpisi_vrsto(racun, priimek, stanje);

    return
    0;
    }