Myśl co robisz. Najpierw poczytać powinieneś kursy z podstawami. Tak się nie zapisuje komponentów przede wszystkim. Poza tym jeżeli te Labele w takiej ilości nie są generowane i rozmieszczane dynamicznie, to gratuluje pomyślunku. Ciekawe jeśi bylo by ich 5000 to też byś je mozolnie układał na formatce i później poprawiał coś? Przede wszystkim do odczytu lub zapisu plików wykorzystaj klasę TFileStream
lub TMemoryStrem
jeżeli już piszesz pod VCL. Zapisuj sobie albo ograniczony długościowo w deklaracji typ string albo zapisuj przed każdym stringiem jego długość i później to odczytuj.
Poniżej prosty przykład dla operacji na konstrukcjach dla Pascala. Podobnie trzeba pokombinować ze wspomnianymi klasami do przechowywania plików lub danych z pliku i pamięci. Przykłady dla Obiekt pascala bez VCL, kolejno pierwszy z ograniczeniem długości stringa i drugi z zapisem długości stringów do pliku.
program example1;
{$APPTYPE CONSOLE}
type
TRec = record
Cnt : Byte;
Txt : string[20];
end;
const
AFileName = 'D:\test.bin';
TxtArr : array[1..2] of string = ('raz', 'dwa');
var
I : integer;
AFile : file of TRec;
DataArr : array[1..2] of TRec;
begin
for I := Low(DataArr) to High(DataArr) do
begin
with DataArr[I] do
begin
Cnt := I;
Txt := TxtArr[I];
end;
end;
// Zapis
Assign(AFile, AFileName);
Rewrite(AFile);
for I := Low(DataArr) to High(DataArr) do
Write(AFile, DataArr[I]);
Close(AFile);
// Odczyt
Assign(AFile, AFileName);
Reset(AFile);
for I := Low(DataArr) to High(DataArr) do
begin
Writeln('Rekord numer: ', I);
with DataArr[I] do
begin
Writeln('Pole Cnt: ', I);
Writeln('Pole Txt: ', Txt);
end;
end;
Writeln('Rozmiar pliku (ilosc rekordow): ', FileSize(AFile));
Close(AFile);
Readln;
end.
program example2;
{$APPTYPE CONSOLE}
const
MaxCnt = 6;
AFileName = 'D:\test_2.bin';
TxtArr : array[1..MaxCnt] of string = ('ucz', 'sie', 'podstaw', 'i', 'kombinuj', 'sam.');
var
S : string;
AFile : File of Byte;
I, TxtLength, RecCnt : integer;
DataArr : array[1..MaxCnt] of string;
begin
for I := Low(DataArr) to High(DataArr) do
DataArr[I] := TxtArr[I];
// Zapis
RecCnt := Length(DataArr);
Assign(AFile, AFileName);
Rewrite(AFile);
BlockWrite(AFile, RecCnt, SizeOf(RecCnt));
for I := Low(DataArr) to High(DataArr) do
begin
TxtLength := Length(DataArr[I]);
BlockWrite(AFile, TxtLength, SizeOf(TxtLength));
BlockWrite(AFile, DataArr[I][1], TxtLength);
end;
Close(AFile);
// Odczyt
Assign(AFile, AFileName);
Reset(AFile);
BlockRead(AFile, RecCnt, SizeOf(RecCnt));
for I := 1 to RecCnt do
begin
BlockRead(AFile, TxtLength, SizeOf(TxtLength));
SetLength(S, TxtLength);
BlockRead(AFile, S[1], TxtLength);
Writeln(S);
end;
Close(AFile);
Readln;
end.
Przeanalizuj sobie też kod dołączony do tego posta. To zmodyfikowany kod, który kiedyś jako przykład napisał tutaj i umieścił @Adam Boduch. Wiem, że kod nie jest najbardziej elegancki, ale powinieneś zrozumieć ideę posługiwania się strumieniami pod VĆL. I proszę na przyszłośc używaj zainstalowanego pomiędzy swoimi uszami TBrain
, googluj, myśl jak najwięcej, kombinuj sam, a na forum pisz w ostateczności. Rozumiem, że to dział Newbie, ale nawet to nie zwalnia z pogooglowania i poczytania kursów lub dokumentacji zanim się coś tak głupiego zacznie tworzyć jak jakiś File of TLabel
.