Tablica-plik-tablica

0

Przepraszam, może to dla niektórych banalne pytanie, ale jak zapisać do pliku tablicę(array of....), oraz jak ją później odczytać????

0

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.

0

Bóg Zaplać! Zaprawdę powiadam Tobie, Bóg zapłać!

0

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ść)

0

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)

0
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?

0

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!!!!

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