Pur și simplu a pune un fișier este un secvență binară de un fel. În Delphi, există trei clase de fişier: dactilografiat, text și netratat. Fișierele tipizate sunt fișiere care conțin date de un anumit tip, cum ar fi Double, Integer sau tipul de înregistrare personalizat definit anterior. Fișierele text conțin caractere ASCII lizibile. Fișierele netedate sunt utilizate atunci când dorim să impunem cea mai mică structură posibilă asupra unui fișier.
Fișiere tipate
În timp ce fișierele text constau din linii terminate cu un CR / LF (#13#10) combinație, fișierele tipate constau din date preluate dintr-un anumit tip de structură de date.
De exemplu, următoarea declarație creează un tip de înregistrare numit TMember și un tablou de variabile de înregistrare TMember.
tip
TMember = record
Nume: şir[50];
e-mail:
şir[30];
Mesaje: LongInt;
Sfârșit;
var Membrii: mulțime[1..50] de TMember;
Înainte de a putea scrie informația pe disc, trebuie să declaram o variabilă de tip fișier. Următoarea linie de cod declară o variabilă de fișier F.
var F: dosar din TMember;
Notă: Pentru a crea un fișier tastat în Delphi, folosim următoarele sintaxă:
var SomeTypedFile: dosar din SomeType
Tipul de bază (SomeType) pentru un fișier poate fi un tip scalar (cum ar fi Double), un tip array sau un tip de înregistrare. Nu ar trebui să fie un șir lung, un array dinamic, o clasă, un obiect sau un indicator.
Pentru a începe să lucrăm cu fișierele din Delphi, trebuie să conectăm un fișier de pe disc la o variabilă de fișier din programul nostru. Pentru a crea această legătură, trebuie să folosim AssignFile procedura de asociere a unui fișier pe un disc cu o variabilă de fișier.
AssignFile (F, 'Members.dat')
Odată stabilită asocierea cu un fișier extern, variabila de fișier F trebuie să fie „deschisă” pentru a-l pregăti pentru citire și scriere. Apelăm procedura de resetare pentru a deschide un fișier existent sau rescriere pentru a crea un nou fișier. Când un program finalizează procesarea unui fișier, fișierul trebuie închis folosind procedura CloseFile. După închiderea unui fișier, fișierul extern asociat este actualizat. Variabila de fișier poate fi apoi asociată cu un alt fișier extern.
În general, ar trebui să folosim întotdeauna excepție de manipulare; pot apărea multe erori atunci când lucrați cu fișiere. De exemplu: dacă apelăm CloseFile pentru un fișier deja închis, Delphi raportează o eroare de E / S. Pe de altă parte, dacă încercăm să închidem un fișier, dar nu am apelat încă la AssignFile, rezultatele sunt imprevizibile.
Scrieți într-un fișier
Să presupunem că am umplut o serie de membri Delphi cu numele lor, e-mailurile și numărul de postări și dorim să stocăm aceste informații într-un fișier de pe disc. Următoarea bucată de cod va face lucrarea:
var
F: dosar din TMember;
i: număr întreg;
începe
AssignFile (F, 'members.dat');
Rescriere (F);
încerca
pentru j: = 1 la 50 do
Scrieți (F, membri [j]);
in cele din urma
CloseFile (F);
Sfârșit;Sfârșit;
Citiți dintr-un fișier
Pentru a prelua toate informațiile din fișierul 'members.dat', am folosi următoarele cod:
var
Membru: TMember
F: dosar din TMember;începe
AssignFile (F, 'members.dat');
Resetare (F);
încerca
în timp ce nu Eof (F) începe
Citește (F, membru);
{DoSomethingWithMember;}
Sfârșit;
in cele din urma
CloseFile (F);
Sfârșit;Sfârșit;
Notă: Eof este funcția de verificare EndOfFile. Folosim această funcție pentru a ne asigura că nu încercăm să citim dincolo de sfârșitul fișierului (dincolo de ultima înregistrare stocată).
Căutarea și poziționarea
În mod normal, fișierele sunt accesate secvențial. Când un fișier este citit folosind procedura standard Citit sau scris folosind procedura standard Write, poziția curentă a fișierului se mută la următoarea componentă de fișier ordonată numeric (înregistrarea următoare). De asemenea, fișierele tipate pot fi accesate aleatoriu prin procedura standard Seek, care mută poziția curentă a fișierului într-o componentă specificată. FilePos și Mărime fișier funcțiile pot fi utilizate pentru a determina poziția curentă a fișierului și dimensiunea curentă a fișierului.
{înapoi la început - prima înregistrare}
Caută (F, 0);
{mergeți la a 5-a înregistrare}
Caută (F, 5);
{Salt la sfârșit - „după” ultima înregistrare}
Caută (F, FileSize (F));
Schimbă și Actualizează
Tocmai ai învățat cum să scrii și să citești întreaga gamă de membri, dar ce vrei să faci este să cauți la al 10-lea membru și să schimbi e-mailul? Următoarea procedură face exact asta:
procedură Schimbă e-mail(const RecN: număr întreg; const Email nou: şir) ;var DummyMember: TMember;începe
{blocare, deschidere, bloc de gestionare a excepțiilor}
Caută (F, RecN);
Citește (F, DummyMember);
DummyMember. Email: = NewEMail;
{citiți trece la următoarea înregistrare, trebuie să
du-te înapoi la înregistrarea originală, apoi scrie}
Caută (F, RecN);
Scrieți (F, DummyMember);
{închidere fișier}Sfârșit;
Finalizarea activității
Asta este - acum ai tot ce ai nevoie pentru a-ți îndeplini sarcina. Puteți scrie informațiile membrilor pe disc, puteți să le citiți și chiar puteți modifica unele date (e-mail, de exemplu) în „mijlocul” fișierului.
Important este că acest fișier nu este un Fișier ASCII, așa arată Notepad (o singură înregistrare):
Ghidul Delphi g Ò5 · ¿ì. 5.. B V.Lƒ, „¨[email protected]Ï.. ç.ç.ï..