Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Cate ceva despre lucrul cu fisiere in DELPHI

Informatica


Câte ceva despre lucrul cu fisiere în DELPHI

Lucrul cu fisiere, directoare si drive-uri de periferice reprezinta exemple de probleme de programare invitabile. La fel ca Pascal, Object Pascal ofera suport pentru lucrul cu 3 tipuri de fisiere: fisiere text, fisiere cu tip si fisiere fara tip(sau binare). De semnalat faptul ca fisierele text contin text ASCII.



Lucrul cu fisiere text

Declararea unui fisier text:

var VfText:TextFile;

Asignarea unei variabile la un fisier text:

AssignFile(VFText,'Fisier.txt');

Deschiderea unui fisier text:

Rewrite(VFText): Daca fisierul exista, va fi suprascris, daca nu exista, este creat;

Reset(VFText): Un fisier existent este deschis pentru operatii de citire.

Append(VFText): Un fisier existent este deschis pentru operatii de

adaugare.

Manipulare fisier text utilizând procedurile predefinite:writeln si readln.

Închiderea fisierului:

CloseFile(VFText).

7.2 Lucrul cu fisiere cu tip

Declararea tipului record:

.

.

type

.

.

TPersonRecord=packed record

Nume:string[20];

Initiala:string[3];

Prenume:string[20];

DataNasterii:TdateTime;

end;

.

.

Declararea tipului fisier:

Tfile=file of TpersonRecord;

Declararea variabilei fisier:

var

VFPers:TFile;

Utilizarea variabilei fisier ca în exemplele:

var

IPersRec:TPersonRecord;

VFTip:Tfile;

begin

AssignFile(VFTip,'Persoana.dat');

Reset(VFTip);

try

if not(Eof(VFTip))

then

read(VFTip, IPersRec);

finally

CloseFile(VFTip);

end;

end;

sau

var

IPersRec:TPersonRecord;

VFTip:Tfile;

begin

AssignFile(VFTip,'Persoana.dat');

Reset(VFTip);

Seek(VFTip, FileSize(VFTip));

try

write(VFTip, IPersRec);

finally

CloseFile(VFTip);

end;

end;

7.3 Utilizarea clasei TfileStream

TFileStream este o clasa care poate fi folosita pentru a gestiona articole care nu sunt obiecte. Este o clasa ale carei metode pot fi folosite pentru a lucra ca înregistrari având orice structura.

Protocolul de utilizare a clasei TFileStream presupune:

Încapsularea tipului de înregistrare cu care se lucreaza si a descendentului clasei TFileStream într-un unit.

Utilizarea unit-ului definit la 1 pentru a rezolva problema asociata tipului de înregistrare.

Utilizând TFileStream se poate realiza foarte usor un browser

specializat pe un anumit tip de înregistrare.

De fapt TFileStream abstractizeaza notiunea de fisier cu tip în ideea de a simplifica efortul de programare depus pentru gestionarea datelor pastrate într-un fisier cu o structura oarecare.

O instanta a clasei TFileStream este creata cu ajutorul constructorului Create, care are sintaxa:

constructor Create(const Filename:string; Mode:Word);

Asadar, la crearea unei instante de tip TFile Stream trebuie sa specificam numele fisierului asociat si modul de operare asupra acestuia. Consultati help-ul Delphi pentru a vedea valorile posibile pentru parametrul Mode si semnificatia acestora. Tot cu ajutorul help-ului se poate învata sintaxa metodelor cu ajutorul carora se fac citiri, scrieri pozitionari în fisiere asociate cu o instanta TFile Stream. Protocolul de lucru cu instante TFileStream poate fi urmarit si în exemplul de mai jos.

unit persrec;

interface

uses Classes, dialogs, sysutils;

type

// Defineste inregistare care pastreaza date despre o

persoana.

TPersonRec = packed record

FirstName: String[20];

LastName: String[20];

MI: String[1];

BirthDay: TDateTime;

Age: Integer;

end;



// Creare descendent TFileStream capabil sa lucreze cu

instante TPersonRec

TRecordStream = class(TFileStream)

private

function GetNumRecs: Longint;

function GetCurRec: Longint;

procedure SetCurRec(RecNo: Longint);

protected

function GetRecSize: Longint; virtual;

public

function SeekRec(RecNo: Longint; Origin: Word): Longint;

function WriteRec(const Rec): Longint;

function AppendRec(const Rec): Longint;

function ReadRec(var Rec): Longint;

procedure First;

procedure Last;

procedure NextRec;

procedure PreviousRec;

// NumRecs arata numarul de inregistrari in stream

property NumRecs: Longint read GetNumRecs;

// CurRec arata inregistrarea curenta in stream

property CurRec: Longint read GetCurRec write SetCurRec;

end;

implementation

function TRecordStream.GetRecSize:Longint;

begin

Result := SizeOf(TPersonRec);

end;

function TRecordStream.GetNumRecs: Longint;

begin

// Returneaza numarul de inregistrari din stream

Result := Size div GetRecSize;

end;

function TRecordStream.GetCurRec: Longint;

begin

Result := (Position div GetRecSize) + 1;

end;

procedure TRecordStream.SetCurRec(RecNo: Longint);

begin

if RecNo > 0 then

Position := (RecNo - 1) * GetRecSize

else

Raise Exception.Create('Cannot go beyond beginning of file.');

end;

function TRecordStream.SeekRec(RecNo: Longint; Origin: Word):

Longint;

begin

Result := Seek(RecNo * GetRecSize, Origin);

end;

function TRecordStream.WriteRec(Const Rec): Longint;

begin

// Scrierea unei inregistrari in stream

Result := Write(Rec, GetRecSize);

end;

function TRecordStream.AppendRec(Const Rec): Longint;

begin

// Adaugarea unei inregistrari in stream

Seek(0, 2);

Result := Write(Rec, GetRecSize);

end;

function TRecordStream.ReadRec(var Rec): Longint;

begin

Result := Read(Rec, GetRecSize);

Seek(-GetRecSize, 1);

end;

procedure TRecordStream.First;

begin

//Pozitionarea la inceput in stream

Seek(0, 0);

end;

procedure TRecordStream.Last;

begin

// Pozitionarea pe ultima inregistrare din stream

Seek(0, 2);

Seek(-GetRecSize, 1);

end;

procedure TRecordStream.NextRec;

begin

if ((Position + GetRecSize) div GetRecSize) = GetNumRecs then

raise Exception.Create('Cannot read beyond end of file')

else

Seek(GetRecSize, 1);

end;

procedure TRecordStream.PreviousRec;

begin

if (Position - GetRecSize >= 0) then

Seek(-GetRecSize, 1)

else

Raise Exception.Create('Cannot read beyond beginning of

the file.');

end;

end.

7.4 Lucrul cu fisiere fara tip

Declararea unei variabile fisier fara tip:

.

.

var VFFaraTip:File;

Deschiderea unui fisier asociat cu o variabila fisier fara tip:

.

.

Reset(VFFaraTip,[<RecSize>]);

.

.

sau

Rewrite(VFFaraTip[,<RecSize.]);

.

.

Pentru citirea datelor din fisiere fara tip avem procedura:

procedure BlockRead(var F:File; var Buf;

const: Integer[; var Result:Integer]);

Pentru scrierea datelor într-un fisier fara tip avem procedura:

.

procedure BlockWrite(var F:File; var Buf;

const:Integer[; var Result:Integer]);

.

.

Dimensiunea implicita a blocului elementar de transfer: 128.

Consultati help-ul sau [6] pentru a vedea cum se lucreaza profesional cu fisierele, structurile de tip directoare si drive-urile în Object Pascal. Consultati, de asemenea, sectiunea 4 a acestui suport de curs pentru a afla mai multe despre capabilitatile Delphi relativ la lucru cu fisiere si directoare.

Alte precizari relativ la posibilitatile mediului Delphi

Evident, puterea mediului Delphi nu se reduce la topicile prezentate în acest suport de curs. Elementele prezentate fac parte din categoria cunostintelor de baza. Elementele de programare avansata în Delphi întregesc universul preocuparilor unui programator în Delphi. Topici care intra sub incidenta sintagmei "programare avansata" în Delphi sunt:

-Utilizarea multitasking-ului în aplicatiile Delphi (procese, fire de executie, sincronizare);

-Utilizarea memoriei în aplicatiile Windows create sub Delphi;

-Aplicatii grafice;

-Lucrul cu imprimanta;

-Obiecte programabile sub Delphi;

-Aplicatii INTERNET;

-Aplicatii multimedia, etc.

Majoritatea acestor topici presupun un studiu temeinic si din perspectiva numeroaselor tehnologii Windows care le fundamenteaza; partial acest studiu este realizat la optionalul de Programare Windows.

Dincolo de acest "partial" stau nenumaratele carti din librarii si biblioteci si marele sfetnic din totdeauna al omului: NECESITATEA.

Când va fi cazul, important este sa stim de unde sa începem demersul de solutionare a unei probleme, care necesita mai mult decât stim la un moment dat despre un anume univers.




Document Info


Accesari: 2260
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )