Zapis i Odczyt Rekordow z dysku?

0

No wlasnie, jak to sie robi?
Czy moge prosic o jakis prosty przykladzik?--take care,

Wodzu

0

Wodzu napisał:
No wlasnie, jak to sie robi?
&gtCzy moge prosic o jakis prosty przykladzik?

Pisane z glowy:

type TMoj=packed record
pole1: integer;
pole2: word;
pole3: array of char [1..8];
end;

var
tablica: array of TMoj;
i: integer;
F: File of TMoj;

begin
SetLength(tablica, 30);
for i:=0 to High(Tablica) do
begin
Tablica[i].pole1:=random(55);
Tablica[i].pole2:=35+i;
Tablica[i].pole3:='bleble';
Tablica[i].pole3[7]:='x';
end;

AssignFile(F,'zbior.dat');
Rewrite(F);
BlockWrite(F,Tablica[0],Length(Tablica);
CloseFile(F);
Tablica:=nil;

{..}
Reset(F);
SetLength(tablica, Filesize(F));
BlockRead(F, tablica[0],FileSize[f]));
CloseFile(F);

--Pawel

Delphi6

0

Hmm..to ja mam pare pytan...

do czego slozy slowka packed w definicji rekordu?

Do czego sluzy funkcja SetLength? do ustalenia dlugosci rekordu?--take care,

Wodzu

0

Wodzu napisał:
Hmm..to ja mam pare pytan...
&gt
&gtdo czego slozy slowka packed w definicji rekordu?

Delphi standardowo stosuje tzw wyrownywanie pol rekordu, co znaczy, ze wstawia miedzy pola pola puste, zeby granice pol byly w wygodnych miejscach. dzieki temu obsluga rekordow jest szybsza. Zwykle wyrownywanie jest do 4 bajtow, ale mozna to gdzies zmienic w opcjach kompilacji. Do zapisu i odczytu na dysku warto wylaczyc wyrownywanie pol dyrektywa packed co gwarantuje ze wielkosc pola w rekordzie bedzie identyczna jak wielkosc zmiennej przechowywanej w tym polu. Dzieki temu plik bedzie bez klopotow czytany przez programy skompilowane z innymi opcjami kompilacji, badz innymi kompilatorami (w tym innymi, np przyszlymi wersjami Delphi), ktore moga stosowac inny domyslny sposob wyrownywania rekordow.

&gt
&gtDo czego sluzy funkcja SetLength? do ustalenia dlugosci rekordu?
&gt

SetLength ustawia wielkosc tablicy dynamicznej (jak powyzej) lub dlugiego (zwyklego) lancucha. Dlugosc rekordu jest suma dlugosci jego pol (z ewentulanym uwzglednieniem wyrownywania pol), wiec jest posrednio ustawiana w deklaracji rekordu. Mozna ja odczytac przy pomocy SizeOf(TnazwaRekordu).

Uzylem SetLength w przykladzie dla zobrazowania sytacji, w ktorej nie wiemy, ile rekordow bedziemy uzywac. Stad tablica rekordow jest dynamiczna: nie podalem wielkosci przy deklaracji. Przed uzyciem trzeba wiec ustawic odpowiednia dlugosc. Ta sprawa wykracza poza Twoje pytanie, ot, taki mi sie przyklad machnal...

&gt--
&gttake care,
&gt
&gtWodzu--Pawel

Delphi6

0

Dzieki za wyczerpujace wyjasnienia :)

Nie obrazisz sie jak pomecze Cie jeszcze troszke? :D

Tym razem bylbym wdzieczny, jak bys mi pokazal prosty przyklad zapisu i odczytu plikow ini?

Np. niech program zapisuje polozenie formy a pozniej odczyta to z pliku ini...

--take care,

Wodzu

0

poczytaj artykul o plikach ini:
http://www.4programmers.net/delphi/ini.html
po jego przeczytaniu wszystko staje sie latwe :)---=-=[ Delphi 3, 6 ]=-=-
-=-=-==[ LKS ]==-=-=-
-=[ [email protected] ]=-

0

Dzieki:) nie wiedzialem ze opis mam pod nosem...;)--take care,

Wodzu

1 użytkowników online, w tym zalogowanych: 0, gości: 1