Kako postaviti pametne telefone i računala. Informativni portal

Binarne datoteke. Binarna datoteka

Primjeri koje smo do sada razmatrali su demonstrirali formatirani unos/izlaz informacija u datoteke. Preporučljivo je koristiti formatiranu datoteku za unos/izlaz brojeva samo kada su oni mali i mali po broju, a također i kada je potrebno osigurati mogućnost pregleda datoteka pomoću nesoftverskih alata. Inače, naravno, puno je učinkovitije koristiti binarni I/O, u kojem se brojevi pohranjuju na isti način kao u OP računala, a ne u obliku znakovnih nizova. Dopustite mi da vas podsjetim da cjelobrojna (int) ili realna (float) vrijednost zauzima 4 bajta u memoriji, dvostruka vrijednost - 8 bajtova, a vrijednost char - 1 bajt. Na primjer, broj 12345 u tekstualnoj (formatiranoj) datoteci je 5 bajta, a u binarnoj datoteci 4 bajta.

Binarne datoteke, tj. datoteke u kojima su informacije pohranjene u internom obliku prezentacije koriste se za naknadnu upotrebu od strane softvera, ne mogu ih pregledavati nesoftverski. Prednost binarnih datoteka je u tome što se, prvo, prilikom čitanja/pisanja ne gubi vrijeme na pretvaranje podataka iz simboličkog prikaza u interni i natrag, a kao drugo, nema gubitka preciznosti realnih brojeva. Kao iu slučaju formatiranog ulaza/izlaza, tako i u slučaju binarnog ulaza/izlaza, za "ispravnu" obradu informacija iz datoteke potrebno je znati koje se vrste podataka, kako i kojim redoslijedom upisuju u binarnu datoteku, pogotovo jer gledanje binarne datoteke pomoću uređivača teksta neće učiniti ništa.

Razmotrimo primjer koji pokazuje pisanje cjelobrojnih elemenata dinamičkog niza u binarnu datoteku i njihovo čitanje iz ove datoteke.

#uključiti

#uključiti

#uključiti

korištenje imenskog prostora std;

cout<< "Vvedite kol-vo elementov celochisl. massiva: "; cin >> N;

int * mas = novi int [N];

za (i = 0; i

cout<< " Vvedite " << i << "-i element: "; cin >> mas [i];

cout<< "\nIdet zapis dannyh v fail..." << endl;

ofstream fout ("c: \\ os \\ bin.dat", ios :: binarni);// stvoriti van. binarni tok

if (! fout) (cout<< "\n Oshibka otkrytiya faila!"; getch(); return 1; }

fout.write (reinterpret_cast (mas), N * sizeof (int));// zapis niza u datoteku

fout.close ();// zatvori tok

cout<< "Dannye uspeshno zapisany!" << endl;

za (i = 0; i

ifstream fin ("c: \\ os \\ bin.dat", ios :: binarni); // stvoriti stream za čitanje datoteke

ako (! peraja) (cout<< "\n Oshibka otkrytiya faila!"; getch(); return 1; }

cout<< "Fail sodergit:" << endl;

fin.read (reinterpret_cast (mas), N * sizeof (int));// čitanje niza iz datoteke

za (i = 0; i

dobiti (); vrati 0;

Posebnu pozornost u ovom programu treba obratiti na korištenje write () (metoda klase ofstream) i read () (metoda klase ifstream). Ove funkcije razmišljaju o podacima u smislu bajtova i dizajnirane su za prijenos određenog broja bajtova iz međuspremnika podataka u datoteku i obrnuto. Parametri ovih funkcija su adresa međuspremnika i njegova duljina u bajtovima.

Funkcija write () osmišljena je za pisanje u datoteku broja bajtova navedenih u drugom parametru od navedenog u prvom parametru adrese međuspremnik podataka, a funkcija read () služi za čitanje podataka iz datoteke. Ovdje treba napomenuti da ove funkcije rade samo na međuspremniku podataka tipa char. S tim u vezi, u ovom smo programu koristili operator reinterpret_cast<> koji pretvara naš međuspremnik podataka tipa int (mas) u međuspremnik tipa char.

Treba imati na umu da tip lijevanja pomoću operatora reinterpret_cast potrebno je samo u slučajevima kada je prvi parametar funkcija pisati () ičitati () nije niz znakova (na kraju krajeva, znak tipačar zauzima samo 1 bajt). Osim toga, ako je potrebno napisati ili pročitati ne niz, već zasebne varijable, tada morate koristiti referentni mehanizam (referencu na adresu međuspremnika podataka), na primjer:

ofstream fout (naziv datoteke, ios :: app | ios :: binarni);

fout.write (reinterpret_cast (& cb), sizeof (float));

Sada je potrebno razgovarati o drugom parametru razmatranih funkcija. U ovom programu, kao drugi parametar, koristili smo izraz N * sizeof (int), s kojim smo izračunali broj bajtova. Na primjer, ako imamo 5 elemenata cjelobrojnog niza, tada će broj bajtova biti 20. Funkcija sizeof () vraća broj bajtova dodijeljenih za tip podataka koji je naveden kao parametar. Na primjer sizeof ( int) vratit će se 4.

Dakle, program prikazan u ovom primjeru omogućuje vam da upišete podatke u binarnom obliku u datoteku bin.dat i pročitate ih iz ove binarne datoteke. Štoviše, nakon čitanja, ti se podaci pretvaraju u tip int, dobivaju strukturu niza i s njim se mogu izvoditi sve operacije.

Sada zamislite da trebate napisati program koji vam omogućuje čitanje podataka iz datoteke bin.dat, a znamo samo da ova datoteka sadrži elemente cjelobrojnog niza u binarnom obliku. Broj snimljenih elemenata ( N ) ne znamo... Prilikom izrade programa nemamo pravo koristiti konstantni niz, t.j. dodijeliti memoriju za to u fazi kreiranja programa. To će dovesti do pogrešnog rezultata. Budući da će premala vrijednost N dovesti do činjenice da se ne broje svi elementi niza, a prevelika vrijednost N će dovesti do popunjavanja dodatnih ćelija slučajnim vrijednostima.

Razmotrimo primjer programa koji vam omogućuje čitanje elemenata cjelobrojnog niza iz binarne datoteke dinamičkim dodjeljivanjem memorije i da biste dokazali realističnost pročitanih podataka, izračunajte njihov zbroj.

#uključiti

#uključiti

#uključiti

korištenje imenskog prostora std;

int N, i, zbroj = 0, dfb; // dfb - duljina datoteke u bajtovima

ifstream fin ("c: \\ os \\ bin.dat", ios :: binarni);

ako (! peraja) (cout<< "Oshibka otkrytiya faila!"; getch(); return 1; }

fin.seekg (0, ios :: kraj);// postaviti poziciju čitanja do kraja datoteke (od kraja 0 bajtova)

dfb = fin.tellg ();// dobiti vrijednost položaja na kraju datoteke (u bajtovima)

N = dfb / 4;// znajući da cijeli broj zauzima 4 bajta, izračunaj broj brojeva

int * arr = novi int [N];// stvoriti dinamički niz

fin.seekg (0, ios :: beg);// prije čitanja podataka pomičemo trenutnu poziciju na početak datoteke

fin.read (reinterpret_cast (arr), dfb);

cout<< "Iz faila schitano " << N << " elementov:" << endl;

za (i = 0; i

za (i = 0; i

cout<< "\n Ih summa = " << sum;

dobiti (); vrati 0;

Razmotrimo detaljno ovaj program u kojem smo aktivno koristili funkcije seekg () i tellg (), koje su metode klase ifstream. Ovdje treba napomenuti da s bilo kojom datotekom kada se otvori, pridružuje se takozvani trenutni položaj čitanja ili pisanja... Kada se datoteka otvori za čitanje, ova pozicija je prema zadanim postavkama postavljena na početak datoteke. Ali vrlo često je potrebno ručno kontrolirati poziciju kako bi se moglo čitati i pisati, počevši od proizvoljnog mjesta u datoteci. Funkcije seekg () i tellg () omogućuju postavljanje i provjeru trenutnog pokazivača čitanja, a funkcije seekp () i tellp () čine isto za pokazivač pisanja.

Metoda seekg (1_parameter, 2_parameter) pomiče trenutnu poziciju čitanja iz datoteke za broj bajtova navedenih u 1_parameter u odnosu na lokaciju navedenu u 2_option. 2_parametar može imati jednu od tri vrijednosti:

ios :: beg - s početka datoteke;

ios :: cur - sa trenutne pozicije;

ios :: end - s kraja datoteke.

Ovdje su beg, cur i end konstante definirane u klasi ios, a simboli :: označavaju operaciju pristupa ovoj klasi. Na primjer, operater fin.seekg (-10, ios :: kraj); omogućuje postavljanje trenutne pozicije čitanja iz datoteke 10 bajtova prije kraja datoteke.

Vratimo se sada na opis programa. Na temelju činjenice da ne znamo broj brojeva upisanih u datoteku, prvo trebamo saznati broj brojeva. Da biste to učinili, koristite fin.seekg (0, ios :: kraj); prelazimo na kraj datoteke i koristimo funkciju tellg () da vratimo duljinu datoteke u bajtovima u dfb varijablu. Funkcija tellg () vraća trenutni položaj pokazivača u bajtovima. Budući da znamo duljinu jednog cijelog broja u bajtovima (4 bajta), lako je izračunati broj brojeva upisanih u datoteku, znajući duljinu datoteke u bajtovima ( N = dfb / 4;). Nakon što smo saznali broj brojeva, stvaramo dinamički niz i prelazimo na početak datoteke kako bismo počeli čitati podatke pomoću funkcije read (). Nakon što se navedeni broj bajtova podataka (dfb) prenese u međuspremnik podataka (arr), tako pročitani podaci poprimaju strukturu niza i postaju potpuno prikladni za sve vrste operacija i transformacija.

U gornjem primjeru, "najduža" opcija je "b": zahtijeva 23 bajta (21 bajt za niz i 2 bajta za cijeli broj). Za opcije "n" i "m" potrebno je 4 odnosno 5 bajtova (vidi tablicu).

naziv, stavka izdavača Varijanta dio

Binarne datoteke

Binarne datoteke pohranjuju informacije u obliku u kojem su predstavljene u memoriji računala, te su stoga nezgodne za ljude. Gledajući u takvu datoteku, nemoguće je razumjeti što je u njoj napisano; ne može se kreirati ili ispravljati ručno - u nekom uređivaču teksta - itd. No, sve te neugodnosti kompenziraju se brzinom rada s podacima.

Osim toga, tekstualne datoteke su sekvencijalne strukture pristupa, a binarne su strukture izravnog pristupa. To znači da se u bilo kojem trenutku možete pozvati na bilo koga, a ne samo na trenutni element binarne datoteke.

Utipkane datoteke

Varijable strukturiranih tipova podataka (osim nizova) ne mogu se čitati iz tekstualne datoteke. Na primjer, ako trebate unijeti podatke iz tekstualne datoteke kako biste ispunili zapis o igračkama informacijama o igračkama dostupnim za prodaju (naziv proizvoda, cijena proizvoda i dobni raspon za koji je igračka namijenjena):

dob: set od 0..18; (definirano granicama u datoteci)

tada morate napisati sljedeći kod:

c: char; i, j, min, max: cijeli broj;

a: niz igračaka;

započeti dodijeliti (f, ulaz); resetiranje (f);

za i: = 1 do 100 uradi ako nije eof (f)

zatim sa [i] do

započeti readln (f, naziv, cijena, min, max); dob: =;

za j: = min do max do dob: = dob + [j];

Kao što možete vidjeti, takvo je čitanje element po element vrlo nezgodno i naporno.

Nudi se izlaz iz ove situacije utipkane datoteke- njihovi elementi mogu biti bilo koje osnovne ili strukturirane vrste podataka. Jedino ograničenje je da svi artikli moraju biti iste vrste. Ova očita neugodnost je

neophodan uvjet za organiziranje izravnog pristupa elementima binarne datoteke: kao u slučaju nizova, ako je duljina svake komponente strukture točno poznata, tada se adresa bilo koje komponente može izračunati pomoću vrlo jednostavne formule:

<начало_структуры> + <номер_компонента>*<длина_компонента>

Opis ukucanih datoteka

U odjeljku var, varijable datoteke dizajnirane za rad utipkane datoteke opisani su kako slijedi:

var<файловая_перем>: datoteka od<тип_элементов_файла>;

Nijedna varijabla datoteke ne može biti konstantna.

Svrha upisane datoteke

Od ovog trenutka do kraja odjeljka, pod riječju "datoteka" podrazumijevamo " binarno upisana datoteka"(naravno, osim ako nije drugačije naznačeno).

Tim dodijeliti (f, "<имя_файла>"); služi za uspostavljanje veze između varijable datoteke f i naziva datoteke za koju će ta varijabla biti odgovorna.

Crta "<имя_файла>"može sadržavati puni put do datoteke. Ako put nije naveden, smatra se da se datoteka nalazi u istom direktoriju kao i izvršni modul programa.

Otvaranje i zatvaranje upisane datoteke

Ovisno o tome koje će radnje vaš program učiniti s datotekom koja se otvara, može se otvoriti na dva načina:

resetiranje (f); - otvaranje datoteke radi čitanja informacija iz nje i istovremenog upisivanja u nju (ako takva datoteka ne postoji, pokušaj otvaranja dovest će do pogreške). Ista se naredba koristi za vraćanje pokazivača na početak datoteke;

prepisati (f); - otvaranje datoteke za upisivanje informacija u nju; ako takva datoteka ne postoji, bit će kreirana; ako datoteka s istim imenom već postoji, nestat će svi podaci koji su se u njoj prethodno nalazili.

Zatvaraju se utipkane datoteke postupak zatvaranja (f), uobičajen za sve vrste datoteka.

Čitanje iz utipkane datoteke

Čitanje iz datoteke otvorene za čitanje vrši se pomoću naredbe read (). Ime varijable datoteke prvo je navedeno u zagradama, a zatim popis unosa1):

Iz datoteke se mogu unijeti samo varijable odgovarajuće deklaracije tipa, ali ovaj tip podataka također može biti strukturiran. Recimo, ako se vratimo na primjer naveden na početku str." Utipkane datoteke“, postat će očito da je upotreba upisanu datoteku umjesto teksta, značajno će smanjiti tekst programa:

tip igračka = naziv zapisa: string; cijena: realna;

dob: set od 0..18; (dano granicama)

var f: datoteka igračaka;

a: niz igračaka; početi

dodijeliti (f, ulaz);

za i: = 1 do 100 do

ako nije eof (f) onda pročitaj (f, a [i]); zatvoriti (f);

Traži u upisanu datoteku

Poznata eof (f: datoteka): booleova funkcija izvještava o postignutom kraju datoteke. Sve ostale funkcije "end-finding" (eoln (), seekeof () iseekeoln ()) zajedničke tekstualnim datotekama ne mogu se primijeniti na datoteke s tipkom.

Ali postoje posebne potprograme koje vam omogućuju rad utipkane datoteke kao kod struktura izravnog pristupa:

1. Funkcija filepos (f: datoteka): longint će izvijestiti o trenutnoj poziciji pokazivača u datoteci f. Ako pokazuje na sam kraj datoteke koja sadrži N elemenata, tada će ova funkcija vratiti rezultat N. To je lako objasniti: elementi datoteke numerirani su počevši od nule, tako da je posljednji element označen brojem N-1. I broj N pripada, dakle, "nepostojećem" elementu - znaku kraja datoteke.

2. Veličina datoteke (f: datoteka): funkcija longint izračunat će duljinu datoteke f.

3. Traženje postupka (f: datoteka, n: longint) pomaknut će pokazivač u datoteci f na početak zapisa n. Ako se pokaže da je n veće od stvarne duljine datoteke, pokazivač će se pomaknuti izvan stvarnog kraja datoteke.

4. Procedura truncate (f: datoteka) će skratiti "rep" datoteke f: svi elementi od trenutne do kraja datoteke bit će uklonjeni iz nje. U stvarnosti, samo će atribut "kraj datoteke" biti prepisan na mjesto gdje je pokazivač pokazao, a fizički "odsječene" vrijednosti ostat će na svojim izvornim mjestima - jednostavno će postati "bez vlasnika".

Pisanje u upisanu datoteku

Možete spremiti varijable u datoteku otvorenu za pisanje pomoću naredbe write (). Kao i u slučaju čitanja, najprije je navedena varijabla datoteke, a zatim popis izlaza:

napisati (f, a, b, c); - upisati u datoteku f (prethodno otvorenu za pisanje naredbama rerite (f) ili reset (f)) varijable a, b, c.

Izlaz na upisanu datoteku dopuštene su samo varijable koje odgovaraju opisu tipa podataka. Neimenovane i netipizirane konstante se ne mogu ispisati u

upisanu datoteku.

Utipkane datoteke smatraju se strukturama i izravnog i sekvencijalnog pristupa. To znači da je pisanje moguće ne samo do samog kraja datoteke, već i do bilo kojeg drugog elementa. Napisana vrijednost prebrisat će prethodnu vrijednost u ovom elementu (stara vrijednost će biti "prebrisana").

Na primjer, ako trebate zamijeniti peti element datoteke vrijednošću pohranjenom u varijabli a, trebali biste napisati sljedeći programski izvadak:

tražiti (f, 5); (pokazivač će biti postavljen na početak 5. elementa)

napisati (f, a); (pokazivač će biti postavljen na početak 6. elementa)

Binarna datoteka je svaka datoteka na vašem računalu. Sve informacije na računalu i povezanim medijima bilježe se u bitovima (otuda i naziv). Međutim, za usporedbu, tekstualna datoteka se može pročitati u čitačima koji odgovaraju ekstenziji (najjednostavnijim - čak iu Notepadu), ali izvršna datoteka ne može. I iako je zapravo txt datoteka ista binarna datoteka, kada se govori o problemu otvaranja sadržaja binarnih datoteka, misli se na izvršne datoteke, kao i na komprimirane podatke.

Trebat će vam

  • - Hex Edit program.

Upute

  • Preuzmite program Hex Edit na tvrdi disk - uređivač datoteka koji predstavlja njihov sadržaj u binarnom obliku. Otvorite program dvostrukim klikom na početnu datoteku. Ovaj softver vam omogućuje čitanje binarnih datoteka u stvarnom vremenu, izmjenu sadržaja, dodavanje vlastitih unosa i još mnogo toga. Da biste ispravno radili u ovom okruženju, morate malo znati o općim konceptima binarnih datoteka.
  • Prozor programa ne razlikuje se puno od uobičajenog uređivača: poznati izbornik i ploča s gumbima, tijelo uređene datoteke, oznake i statusna traka. Otvorite binarnu datoteku kroz izbornik Datoteka ili klikom na odgovarajuću ikonu na ploči. Binarna datoteka će se pojaviti pred vama kao nizovi s brojevima i slovima. Nemojte brkati ove znakove s podacima za ispis u tekstualnim datotekama. Također se mogu uređivati ​​brisanjem simbola, ali to će izbrisati ćelije s podacima, dijelove datoteke.
  • Unesite izmjene u sadržaj datoteke. Aplikacija može prikazati važne dijelove datoteke radi lakšeg pretraživanja, a ima i fleksibilnu konfiguraciju grafičkog prikaza binarnog koda. Prebacite prikaz sadržaja na ASCII + IBM / OEM način kako biste vidjeli programski kod datoteke. Ako unesete pogrešne retke u datoteku, ona možda neće ispravno raditi, što će uzrokovati ozbiljne posljedice za operativni sustav osobnog računala.
  • Spremite promjene. Ako nemate iskustva u uređivanju datoteka na ovaj način, budite spremni na to da se datoteka neće otvoriti i odbiti raditi nakon izmjena. Najvjerojatnije ćete zabrljati nekoliko kopija prije nego što završite posao. Pokušajte ne spremiti sve promjene u izvornu datoteku kako bi njezin sadržaj ostao nepromijenjen.
  • Vjerojatno ste naišli na pojmove "tekst" i "binarni" prije nego što ste pročitali neke članke o datotekama. I odlučili su da ti je sve ovo preteško, nikad nećeš shvatiti, pa se nisu u to udubljivali, odustajali od toga.

    Pokušat ćemo sve objasniti što jednostavnijim jezikom, jer su takve informacije korisne svakom korisniku, pa i najneiskusnijem, jer su izravno povezane s osnovama računalne sigurnosti.

    Malo teorije

    Tekstualna datoteka sadrži ASCII znakove (kratica je skraćenica od American Standard Code for Information Interchange, nešto poput "American standard for encoding for information interchange").

    Zapravo, ASCII je tablica u kojoj je svakom slovu, broju, interpunkcijskom znaku i različitim "psima" sa "pahuljama" (u smislu @ i *) dodijeljen jedan bajt. To jest, osam nula i jedinica (bitova). Plus, naravno, kontrolni znakovi poput prijeloma redaka.

    Program za otvaranje datoteka s ASCII znakovima pretvara bajtove u slova, brojeve i druge ispisne znakove na zaslonu. Naravno, softver mora razumjeti onaj dio tablice koji odgovara ruskom jeziku, ali to je već pitanje kodiranja.

    U binarnoj datoteci nule i jedinice su raspoređene u slijedu koji nije neophodan za prikaz tekstova (iako ih ima, na primjer, * doc). A za što, pitate se. Odgovor je jednostavan: za sve ostalo. Programi, filmovi, glazba, slike - svaki format ima svoje strukturne principe za organiziranje podataka.

    Sama riječ "binarni" znači "dvokomponentni", "dvostruki". Doista, samo su dvije komponente jasno definirane - nula i jedan, bitovi, "cigle" koje čine datoteku. Značenje svega ostalog može se očitovati samo tijekom pokretanja (otvaranje, reprodukcija).

    Donja strana digitalnog svijeta

    Unutar binarne datoteke možete pogledati pomoću posebnog programa - HEX uređivača. (Od riječi Hexadecimal, koja označava heksadecimalni brojevni sustav.) Takav softver pokazuje bajtove u obliku svojih HEX-oznaka, koji se zapravo nalaze i u obliku tablice (matrice).

    Na primjer, bajtovi JPEG slike, obične slike ili fotografije u prozoru uređivača bit će prikazani kao FF D8 FF 00 04 3A 29 i tako dalje.

    Stručnjak će shvatiti da slijed bajtova FF D8 na samom početku ukazuje da imamo posla s JPEG-om. A za nespecijaliste sve to nije toliko zanimljivo.

    Također možete otvoriti tekstualnu datoteku u HEX uređivaču da vidite koji bajtovi odgovaraju određenim slovima (ASCII znakovi). Ali samo iz radoznalosti, još uvijek nema smisla.

    Ali binarne datoteke se ponekad gledaju u heksadecimalnom obliku u prilično smislene i specifične svrhe. Na primjer, stručnjaci u antivirusnim laboratorijima tako traže zlonamjerni kod koji je dodan glavnom. Usput, prijeđimo na sigurnosna pitanja.

    Što može štetiti

    Tekstualna datoteka ne može sadržavati ništa osim ASCII znakova. Međutim, programi nisu samo binarni, već se sastoje i od gore navedenih simbola. To podrazumijeva skripte, naravno.

    Drugim riječima, * txt datoteka u principu nije zaražena i ne predstavlja prijetnju. A ako postoji skripta unutar tekstualne datoteke, onda može napraviti mnogo nestašluka.

    Na primjer, * bat datoteka sadrži kod raznih naredbi i pokreće se dvostrukim klikom, kao običan program. Te su naredbe napisane ASCII znakovima, ali ih operativni sustav može protumačiti - pretvoriti ih u takve nule i jedinice koje su tipične za programe.

    Ali, naravno, ne klikate na nepoznate bat-datoteke, zar ne? To je dobro.

    Prethodne publikacije:

    Zadnja izmjena: 2012-11-06 14:45:16

    Oznake materijala:,

    zapisa), onda je želja da se nekako smanji neiskorišteni, ali zauzeti memorijski prostor sasvim razumljiva.

    Pogotovo za takve slučajeve, postoje zapisi s varijantnim dijelom.

    Opis zapisa s varijantnim dijelom

    U odjeljku var zapis s varijantnim dijelom opisati kako slijedi:

    var<имя_записи>: zapis<поле1>: <тип1>; [<поле2>: <тип2>;] [...] slučaj<поле_переключатель>: <тип>od<варианты1>: (<поле3>: <тип3>; <поле4>: <тип4>; ...); <варианты2>: (<поле5>: <тип5>; <поле6>: <тип6>; ...); [...] kraj;

    Nevarijantni dio notacija (ispred ključne riječi case) poštuje ista pravila kao i obična notacija. Općenito govoreći, nevarijantni dio može u potpunosti izostati.

    Varijanta dio počinje rezerviranim malim padežom riječi, nakon čega se označava polje zapisa koje će nadalje služiti kao prekidač. Kao i kod običnog case iskaza, prekidač mora pripadati jednom od nabrojane vrste podataka (vidi predavanje 3). Popis izbora može biti konstanta, raspon ili unija više konstanti ili raspona. Skup polja koja se moraju uključiti u strukturu zapisa, ako je izvedena odgovarajuća opcija, zatvoren je u zagradama.

    Primjer... Za opis sadržaja knjižnice potrebni su sljedeći podaci:

    Stupci "Naslov" i "Izdavač" zajednički su za sve tri opcije, a ostala polja ovise o vrsti tiskanog izdanja. Za implementaciju ove strukture koristit ćemo se unos s varijantnim dijelom:

    tip biblio = naziv zapisa, izdavač: string; stavka slučaja: znak od "b": (autor: string; godina: 0..2004); "n": (podaci: datum); "m": (godina: 1700..2004; mjesec: 1..12; broj: cijeli broj); kraj;

    Ovisno o vrijednosti polja stavke, zapis će sadržavati 4, 5 ili 6 polja.

    Mehanizam za korištenje zapisa s varijantnim dijelom

    Broj bajtova dodijeljenih od strane prevoditelja za zapis s varijantnim dijelom, određuje njegova "najduža" verzija. Kraći skupovi polja iz drugih varijanti zauzimaju samo djelić dodijeljene memorije.

    U gornjem primjeru, "najduža" opcija je "b": zahtijeva 23 bajta (21 bajt za niz i 2 bajta za cijeli broj). Za opcije "n" i "m" potrebno je 4 odnosno 5 bajtova (vidi tablicu).

    ime, izdavač artikal Varijanta dio
    ... "b" Autor godina
    ... "n" podaci
    ... "m" godina mjesec broj
    ... "b" Autor godina

    Binarne datoteke

    Binarne datoteke pohranjuju informacije u obliku u kojem su predstavljene u memoriji računala, te su stoga nezgodne za ljude. Gledajući u takvu datoteku, nemoguće je razumjeti što je u njoj napisano; ne može se kreirati ili ispravljati ručno - u nekom uređivaču teksta - itd. No, sve te neugodnosti kompenziraju se brzinom rada s podacima.

    Također, tekstualne datoteke pripadaju strukturama sekvencijalni pristup, a binarni - izravni. To znači da se u bilo kojem trenutku možete pozvati na bilo koga, a ne samo na trenutni element.

    Vrhunski povezani članci