Kako podesiti pametne telefone i računare. Informativni portal

Binarni fajlovi. Binarni fajl

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 mali i mali po broju, kao i kada je potrebno obezbijediti mogućnost pregleda datoteka pomoću nesoftverskih alata. Inače, naravno, mnogo je efikasnije koristiti binarni I/O, u kojem se brojevi pohranjuju na isti način kao u OP računara, a ne u obliku nizova znakova. Dozvolite 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 bajtova, au binarnoj datoteci 4 bajta.

Binarni fajlovi, tj. datoteke u kojima su informacije pohranjene u internom obliku prezentacije se koriste za naknadnu upotrebu od strane softvera, ne mogu se pregledati od strane nesoftvera. Prednost binarnih datoteka je u tome što se, prvo, prilikom čitanja/pisanja ne gubi vrijeme na pretvaranje podataka iz simboličkog prikaza u interno i nazad, a drugo, nema gubitka preciznosti realnih brojeva. Kao iu slučaju formatiranog ulaza/izlaza, tako iu slučaju binarnog ulaza/izlaza, za "ispravnu" obradu informacija iz datoteke potrebno je znati koje vrste podataka, kako i kojim redoslijedom se upisuju u binarnu datoteku, pogotovo zato što 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.

#include

#include

#include

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); // kreiramo stream za čitanje fajla

ako (! fin) (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

gettch (); return 0;

Posebnu pažnju u ovom programu treba obratiti na upotrebu write () (metoda klase ofstream) i read () (metoda ifstream klase). Ove funkcije razmišljaju o podacima u terminima bajtova i dizajnirane su za prijenos određenog broja bajtova iz bafera podataka u datoteku i obrnuto. Parametri ovih funkcija su adresa bafera i njegova dužina u bajtovima.

Funkcija write () je dizajnirana da u datoteku upiše broj bajtova specificiranih u drugom parametru od specificiranog u prvom parametru adrese bafer podataka, a funkcija read () služi za čitanje podataka iz datoteke. Ovdje treba napomenuti da ove funkcije rade samo na baferu podataka tipa char. U tom smislu, u ovom programu koristili smo operator reinterpret_cast<> koji pretvara naš bafer podataka tipa int (mas) u bafer tipa char.

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

ofstream fout (ime 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), sa kojim smo izračunali broj bajtova. Na primjer, ako imamo 5 cjelobrojnih elemenata niza, tada će broj bajtova biti 20. Funkcija sizeof () vraća broj bajtova dodijeljenih za tip podataka specificiran kao parametar. Na primjer sizeof ( int) će vratiti 4.

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

Sada zamislite da trebate napisati program koji vam omogućava čitanje podataka iz bin.dat datoteke, a znamo samo da ova datoteka sadrži elemente niza cijelih brojeva u binarnom obliku. Broj snimljenih elemenata ( N ) Ne znamo... Prilikom kreiranja programa nemamo pravo koristiti konstantan niz, tj. 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ćava da čitate elemente cjelobrojnog niza iz binarne datoteke dinamičkim dodjeljivanjem memorije i da biste dokazali realnost očitanih podataka, izračunajte njihov zbir.

#include

#include

#include

korištenje imenskog prostora std;

int N, i, suma = 0, dfb; // dfb - dužina datoteke u bajtovima

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

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

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

dfb = fin.tellg ();// dobijemo vrijednost pozicije kraja datoteke (u bajtovima)

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

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

fin.seekg (0, ios :: beg);// prije čitanja podataka, pomjeramo 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;

gettch (); return 0;

Razmotrimo ovaj program detaljno, u kojem smo aktivno koristili funkcije seekg () i tellg (), koje su metode ifstream klase. Ovdje treba napomenuti da sa bilo kojom datotekom kada se otvori, pridružuje se takozvana trenutna pozicija čitanja ili pisanja... Kada se datoteka otvori za čitanje, ova pozicija je po defaultu postavljena na početak datoteke. Ali vrlo često je potrebno ručno kontrolisati poziciju da biste mogli čitati i pisati, počevši od proizvoljne lokacije u datoteci. Seekg () i tellg () funkcije vam omogućavaju da postavite i provjerite trenutni pokazivač čitanja, a funkcije seekp () i tellp () rade isto za pokazivač pisanja.

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

ios :: beg - od početka fajla;

ios :: cur - sa trenutne pozicije;

ios :: end - sa kraja fajla.

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ćava vam da postavite trenutnu poziciju čitanja iz datoteke 10 bajtova prije kraja datoteke.

Vratimo se sada na opis programa. Na osnovu činjenice da ne znamo broj brojeva upisanih u datoteku, prvo moramo saznati broj brojeva. Da biste to učinili, koristite fin.seekg (0, ios :: kraj); prelazimo na kraj datoteke i koristimo funkciju tellg () da vratimo dužinu datoteke u bajtovima u dfb varijablu. Telg () funkcija vraća trenutnu poziciju pokazivača u bajtovima. Pošto znamo dužinu jednog cijelog broja u bajtovima (4 bajta), lako je izračunati broj brojeva upisanih u datoteku, znajući dužinu datoteke u bajtovima ( N = dfb / 4;). Nakon što smo saznali broj brojeva, kreiramo dinamički niz i prelazimo na početak datoteke kako bismo počeli čitati podatke pomoću funkcije read (). Nakon što se naznačeni broj bajtova podataka (dfb) prenese u bafer podataka (arr), na ovaj način pročitani podaci dobijaju strukturu niza i postaju potpuno pogodni za bilo koju vrstu operacija i transformacija.

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

naziv, stavka izdavača Varijanta dio

Binarni fajlovi

Binarne datoteke pohranjuju informacije u obliku u kojem su predstavljene u memoriji računara i stoga su nezgodne za ljude. Gledajući u takav fajl, nemoguće je razumjeti šta je u njemu napisano; ne može se kreirati ili ispravljati ručno - u nekom uređivaču teksta - itd. Međutim, sve ove neugodnosti nadoknađuju se brzinom rada sa podacima.

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

Otkucani fajlovi

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

starost: 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 dodjeljivanje (f, ulaz); reset (f);

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

zatim sa [i] do

započeti readln (f, ime, cijena, min, max); starost: =;

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

Kao što vidite, takvo čitanje element po element je vrlo nezgodno i naporno.

Nudi se izlaz iz ove situacije otkucanih fajlova- njihovi elementi mogu biti bilo kojeg osnovnog ili strukturiranog tipa podataka. Jedino ograničenje je da sve stavke moraju biti iste vrste. Ova očigledna neugodnost je

neophodan uslov za organizovanje direktnog pristupa elementima binarne datoteke: kao iu slučaju nizova, ako je dužina svake komponente strukture tačno poznata, adresa bilo koje komponente se može izračunati pomoću vrlo jednostavne formule:

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

Opis ukucanih datoteka

U odjeljku var, varijable datoteke namijenjene za rad otkucanih fajlova opisani su kako slijedi:

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

Nijedna varijabla datoteke ne može biti konstantna.

Svrha otkucane datoteke

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

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

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

Otvaranje i zatvaranje otkucane datoteke

U zavisnosti od toga koje radnje će vaš program uraditi sa datotekom koja se otvara, može se otvoriti na dva načina:

reset (f); - otvaranje datoteke za čitanje informacija iz nje i istovremeno pisanje u nju (ako takva datoteka ne postoji, pokušaj njenog otvaranja će uzrokovati grešku). Ista komanda se koristi za vraćanje pokazivača na početak datoteke;

prepisati (f); - otvaranje datoteke radi upisivanja informacija u nju; ako takav fajl ne postoji, biće kreiran; ako datoteka sa istim imenom već postoji, sve informacije koje su prethodno sadržane u njoj će nestati.

Zatvaraju se otkucanih fajlova procedura zatvaranja (f), uobičajena za sve tipove datoteka.

Čitanje iz ukucane datoteke

Čitanje iz datoteke otvorene za čitanje vrši se pomoću naredbe read (). Ime varijable datoteke je prvo naznačeno u zagradama, a zatim slijedi lista 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 dat na početku str." Otkucani fajlovi“, postaće očigledno da je upotreba otkucani fajl umjesto teksta, značajno će smanjiti tekst programa:

tip toy = ime zapisa: string; cijena: realna;

starost: set od 0..18; (dato granicama)

var f: datoteka igračke;

a: niz igračaka; početi

dodijeliti (f, ulaz);

za i: = 1 do 100 do

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

Pretražite u ukucanom fajlu

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

Ali postoje posebne potprograme koje vam omogućavaju rad otkucanih fajlova kao kod struktura direktnog pristupa:

1. Funkcija filepos (f: datoteka): longint će prijaviti trenutnu poziciju pokazivača u datoteci f. Ako pokazuje na sam kraj datoteke koja sadrži N elemenata, onda će ova funkcija vratiti rezultat N. Ovo je lako objasniti: elementi fajla su numerisani počevši od nule, tako da je poslednji 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 će izračunati dužinu datoteke f.

3. Traženje procedure (f: datoteka, n: longint) će pomjeriti pokazivač u datoteci f na početak zapisa n. Ako se ispostavi da je n veće od stvarne dužine datoteke, pokazivač će biti pomjeren izvan stvarnog kraja datoteke.

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

Pisanje u otkucani fajl

Možete spremiti varijable u datoteku otvorenu za pisanje pomoću naredbe write (). Kao iu slučaju čitanja, prva je naznačena varijabla datoteke, a zatim lista izlaza:

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

Izlaz na otkucani fajl dozvoljene su samo varijable koje odgovaraju opisu tipa podataka. Neimenovane i netipizirane konstante se ne mogu ispisati u

otkucani fajl.

Otkucani fajlovi smatraju se strukturama direktnog i sekvencijalnog pristupa. To znači da je pisanje moguće ne samo do samog kraja datoteke, već i do bilo kojeg drugog elementa. Upisana vrijednost će prepisati prethodnu vrijednost u ovom elementu (stara vrijednost će biti "prepisana").

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

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

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

Binarna datoteka je bilo koja datoteka na vašem računaru. Sve informacije na računaru i povezanim medijima snimaju 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 u stvari 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.

Trebaće ti

  • - Hex Edit program.

Instrukcije

  • 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ćava da čitate binarne datoteke u realnom vremenu, mijenjate sadržaj, dodajete vlastite unose i još mnogo toga. Da biste ispravno radili u ovom okruženju, morate malo znati o općim konceptima binarnih datoteka.
  • Prozor programa se ne razlikuje mnogo od uobičajenog uređivača: poznati meni i panel s dugmadima, tijelo uređene datoteke, oznake i statusna traka. Otvorite binarnu datoteku kroz meni File ili klikom na odgovarajuću ikonu na panelu. Binarni fajl će se pojaviti pred vama kao nizovi sa brojevima i slovima. Nemojte brkati ove znakove sa podacima za štampanje u tekstualnim datotekama. Mogu se uređivati ​​i brisanjem simbola, ali će se tako izbrisati ćelije sa podacima, dijelovi datoteke.
  • Napravite promjene u sadržaju 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 da vidite programski kod datoteke. Ako unesete pogrešne redove u datoteku, ona možda neće raditi ispravno, što će uzrokovati ozbiljne posljedice po operativni sistem osobnog računara.
  • Sačuvajte promjene. Ako nemate iskustva u uređivanju datoteka na ovaj način, budite spremni na to da se datoteka neće otvoriti i odbiti da radi nakon unošenja izmjena. Najvjerovatnije ćete zabrljati nekoliko kopija prije nego što završite posao. Pokušajte da ne sačuvate sve promene u originalnom fajlu tako da njegov sadržaj ostane nepromenjen.
  • Vjerovatno ste naišli na pojmove "tekst" i "binarni" prije nego što ste pročitali neke članke o datotekama. I odlučili su da vam je sve ovo preteško, nikada nećete shvatiti, pa se nisu udubljivali u to, odustajali od toga.

    Pokušat ćemo sve objasniti najjednostavnijim mogućim jezikom, jer su takve informacije korisne svakom korisniku, pa i najneiskusnijem, jer su direktno vezane za osnove računarske sigurnosti.

    Malo teorije

    Tekstualna datoteka sadrži ASCII znakove (kratica je skraćenica za američki standardni kod za razmjenu informacija, nešto poput "američkog standarda za kodiranje za razmjenu informacija").

    Zapravo, ASCII je tabela 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 reda.

    Program za otvaranje datoteka sa ASCII znakovima konvertuje bajtove u slova, brojeve i druge znakove za štampanje na ekranu. Naravno, softver mora razumjeti onaj dio tabele koji odgovara ruskom jeziku, ali to je već pitanje kodiranja.

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

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

    Donja strana digitalnog svijeta

    Unutar binarne datoteke možete pogledati pomoću posebnog programa - HEX editora. (Od riječi Hexadecimal, koja označava heksadecimalni brojevni sistem.) Takav softver pokazuje bajtove u obliku njihovih HEX-oznaka, koji se zapravo nalaze iu obliku tabele (matrice).

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

    Specijalista će shvatiti da sekvenca bajtova FF D8 na samom početku ukazuje da imamo posla sa JPEG. A za nespecijaliste, sve ovo nije toliko zanimljivo.

    Takođe možete otvoriti tekstualnu datoteku u HEX editoru da vidite koji bajtovi odgovaraju određenim slovima (ASCII znakovi). Ali samo iz radoznalosti, i dalje 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 laboratorijama tako traže zlonamjerni kod koji je dodan glavnom. Usput, pređimo na sigurnosna pitanja.

    Šta 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 u tekstualnoj datoteci, 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 komande su napisane u ASCII znakovima, ali operativni sistem ih može interpretirati - pretvoriti ih u takve nule i jedinice koje su tipične za programe.

    Ali, naravno, ne klikate na nepoznate bat-fajlove, 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 sa varijantnim dijelom.

    Opis zapisa s varijantnim dijelom

    U odjeljku var zapis sa varijantnim dijelom opisati kako slijedi:

    var<имя_записи>: rekord<поле1>: <тип1>; [<поле2>: <тип2>;] [...] slučaj<поле_переключатель>: <тип>of<варианты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. Uopšteno govoreći, nevarijantni dio može u potpunosti izostati.

    Varijanta dio počinje rezervisanim malim i malim slovima, nakon čega se označava polje zapisa koje će dalje služiti kao prekidač. Kao i kod običnog case iskaza, prekidač mora pripadati jednom od nabrojanih tipova podataka (vidjeti predavanje 3). Lista 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 izvršena odgovarajuća opcija, zaobljen je u zagradama.

    Primjer... Za opis sadržaja biblioteke potrebne su sljedeće informacije:

    Kolone "Naslov" i "Izdavač" su zajedničke za sve tri opcije, a ostala polja zavise od vrste štampanog izdanja. Za implementaciju ove strukture koristit ćemo se unos sa varijantnim dijelom:

    tip biblio = naziv zapisa, izdavač: string; stavka slučaja: znak "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 sa varijantnim dijelom

    Broj bajtova koje je dodijelio kompajler za zapis sa varijantnim dijelom, određuje njegova "najduža" verzija. Kraći skupovi polja iz drugih varijanti zauzimaju samo dio dodijeljene memorije.

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

    ime, izdavač predmet Varijanta dio
    ... "b" autor godine
    ... "n" podaci
    ... "m" godine mjesec broj
    ... "b" autor godine

    Binarni fajlovi

    Binarne datoteke pohranjuju informacije u obliku u kojem su predstavljene u memoriji računara i stoga su nezgodne za ljude. Gledajući u takav fajl, nemoguće je razumjeti šta je u njemu napisano; ne može se kreirati ili ispravljati ručno - u nekom uređivaču teksta - itd. Međutim, sve ove neugodnosti nadoknađuju se brzinom rada sa podacima.

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

    Top srodni članci