Przepraszam, może to dla niektórych banalne pytanie, ale jak zapisać do pliku tablicę(array of....), oraz jak ją później odczytać????
Najpierw musisz zapisać rozmiar tablicy (chociażby przez BlockWrite), a potem poszczególne elementy tablicy w pętli zapisujesz:
for i := 0 to Length(Tablica)-1 do
BlockWrite(Plik, Tablica[i], 1);
Analogicznie odczyt.
Bóg Zaplać! Zaprawdę powiadam Tobie, Bóg zapłać!
Nie trzeba zapisywać rozmiaru, Block???? może być jedno (a nie pętla):
BlockWrite(Plik, Tablica[0], Length(Tablica));
plik musi być tego typu co tablica.
Odczyt:
po otwarciu pliku:
SetLength(Tablica, FileSize(Plik));
BlockRead(Plik, Tablica[0], FileSize(Plik));
Uwaga: to jest napisane dla tablic dynamicznych (oczywiście o elementach typu statycznego, nie np array of string bo zapiszesz wskaźniki a nie zawartość)
pytanie za sto ort!.... dlaczego to cos nie dzial ?
procedure TMainForm.mZapiszBazClick(Sender: TObject);
var
i:integer;
plik:file;
begin
if sdlg.Execute then
begin
assignfile(plik,sdlg.FileName);
rewrite(plik,1);
for i := 0 to Length(Tablica)-1 do
begin
BlockWrite(plik, tablica[i], SizeOf(tablica[i]));
end;
closefile(plik);
end;
end;
procedure TMainForm.mWczytajBazClick(Sender: TObject);
var
i:integer;
plik:file;
begin
if odlg.Execute then
begin
assignfile(plik,odlg.FileName);
reset(plik,1);
for i := 0 to Length(Tablica)-1 do
begin
BlockRead(plik, tablica[i], SizeOf(tablica[i]));
end;
closefile(plik);
end;
end;
zapomnialem dodac ze to jest tablica dynamiczna array of kontakt (rekord z polami imie, nick, ggnumber, email)
procedure TMainForm.mZapiszBazClick(Sender: TObject);
var
i:integer;
plik:file of kontakt; // <===
begin
if sdlg.Execute then
begin
assignfile(plik,sdlg.FileName);
rewrite(plik); // <===
BlockWrite(plik, tablica[0], Length(tablica)); //<====
{usun:
for i := 0 to Length(Tablica)-1 do
begin
BlockWrite(plik, tablica[i], SizeOf(tablica[i]));
end;
}
closefile(plik);
end;
end;
procedure TMainForm.mWczytajBazClick(Sender: TObject);
var
i:integer;
plik:file of kontakt; //<====
begin
if odlg.Execute then
begin
assignfile(plik,odlg.FileName);
reset(plik); // <=====
SetLength(tablica, FileSize(plik)); // jesli potrzebne
BlockRead(plik, tablica[0], FileSize(plik));
{usun:
for i := 0 to Length(Tablica)-1 do
begin
BlockRead(plik, tablica[i], SizeOf(tablica[i]));
end;
}
closefile(plik);
end;
end;
zapomnialem dodac ze to jest tablica dynamiczna array of kontakt (rekord z polami imie, nick, ggnumber, email)
PS. Rozumiem ze pola tekstowe nie sa stringami dynamicznymi?
Type 'kontakt' needs finalization - not allowed in file type
Type 'kontakt' needs finalization - not allowed in file type
P.S.
type
kontakt = record
imie:string;
nick:string;
email:string;
numergg:string;
end;
nie wiem dlaczego ale po wpisaniu ograniczenia (nick:string[30]) wyskakuje ze could not create output file '*****.projekt1.exe'
Działa!!!! Eureka!!!! Viva la pq!!!!