No wlasnie, jak to sie robi?
Czy moge prosic o jakis prosty przykladzik?--take care,
Wodzu
No wlasnie, jak to sie robi?
Czy moge prosic o jakis prosty przykladzik?--take care,
Wodzu
Wodzu napisał:
No wlasnie, jak to sie robi?
>Czy 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
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
Wodzu napisał:
Hmm..to ja mam pare pytan...
>
>do 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.
>
>Do czego sluzy funkcja SetLength? do ustalenia dlugosci rekordu?
>
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...
>--
>take care,
>
>Wodzu--Pawel
Delphi6
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
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] ]=-
Dzieki:) nie wiedzialem ze opis mam pod nosem...;)--take care,
Wodzu