ďťż

Ładny brzuch

Czesc Wszystkich, Bardzo Was prosze o pomoc mam krotkie lamerskie pytanie za co tez przepraszam chodzi mi o wczytanie rekordu ale nie jego wyswietlenie lecz wczytanie go do tablicy

Rekord zawiera powiedzmy 2 pola " a " i " b " lecz w zaleznosci od zapisanego pliku rozna ilosc indeksow. W jednym a i b maja po 50 w innym 10, a moze sie tez zdarzyc ze i po 500 wpisow.

Jak wczytac taki rekord do tablicy i jak taka tablice odpowiednio zadeklarowac ?
Prosze pomozcie.

Wiem jak wczytac taki rekord Oto przykład:
(lecz jesli chodzi o tablice znacznie gorzej)

procedure TMainForm.Button1Click(Sender: TObject); var F: file of TRecord; Rec : TRecord; begin AssignFile(F, 'Plik_Rekordu.dat'); try Reset(F); Read(F, Rec); finally CloseFile(F); end; end;



hhmmm za bardzo na recorcd'owych sprawach sie nie znam, ale słysząłem ze jest takie coś jak tablica dynamiczna.

Ogólne użycie:

var
Tab: array of TCosTam;

poźniej uzywamy takie cos jak np SetLength(tab, liczba_wpisów+1) powiększamy tablice o 1 wpis;

aa i wazne; po zakończeniu progrramu dajemy Finalize(tab); bądź tab := nil;

wystarczy setlength(tablica, 0); :P
w twoim przypadku po otwarciu pliku resetem ustaw dlugosc tej tablicy setlength(tablica, filesize(F));

Dzieki za szybka odpowiedz. Wlasnie kombinuje z tym co napisales, prubuje cos takiego

TMy_Record = record a : string [15]; b: string [15]; end; TTab = array of TMy_Record; var Tab : TTab; ------------------------------ SetLenght (Tab) for i = 0 to ...?.... do begin Tab (i). a Tab (i). b end;
Nie wiem jak to wszystko poskladac do kupy w procedure ładujaca

W Czasie piasania tego Deadeye dodal odpowiedz wiec temat mozna zamknac.
Dziekuje Wam za Pomoc
Użytkownik Anmadeusz edytował ten post 06 luty 2007, 13:52


Witam jeszcze raz. Sorki ze odnawiam temat chodzi mi tylko o sprawdzenie tego,jesli mozecie w miare mozliwosci to bardzo prosze o to Was prosze i o ewentualne uwagi.
Czy wczytanie rekordu(z pliku) do tablicy jest poprawne?

{ Public declarations } end; TMoj_Rekord = record A : string [20]; B : string [20]; end; TNameFile = file of TMoj_Rekord; var Form2: TForm2; Tab : array of TMoj_Rekord; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); var F : TNameFile; begin if OpenDialog1.Execute then begin AssignFile(F, OpenDialog1.FileName); try Reset(F); SetLength(Tab, filesize(F)); finally CloseFile (F); end; end; end; procedure TForm2.FormCreate(Sender: TObject); begin SetLength(Tab, 0); end; end.

Pytasz czy poprawne - a nie możesz sprawdzić? Ten kod nie zadziała poprawnie. Ostatnimi czasy dużo pytań odnośnie plików typowanych się pojawia... pisałem już na ten temat nie raz.

Ok, skoro już pisałem, kolejny raz nie zrobi żadnej różnicy...

type PMojRekord = ^TMojRekord; //wskaznik na rekord, niekonieczny, ale oszczedzamy pamiec PNameFile = ^TNameFile; //wskaznik na plik TMojRekord = record //rekord A: string [20]; B: string [20]; end; TNameFile = file of TMojRekord; //plik typowany TRecArray = array of TMojRekord; //nasza tablica. Mozna rowniez nie tworzyc typu, tylko zwykla zmienna, rowniez przy parametrze do procedury var Tab: TRecArray;
Wczytywanie:
procedure WczytajPlik(out cArray: TRecArray; const FName: string); var F: PNameFile; //plik i: integer; Rec: PMojRekord; //rekord begin New(F); AssignFile(F^, FName); try New(Rec); Reset(F^); for i := 0 to FileSize(F^) - 1 do begin Read(F^, Rec^); //odczyt SetLength(cArray, Length(cArray) + 1); //zwiekszanie rozmiaru tablicy with cArray[High(cArray)] do begin {przypis} A := Rec^.A; B := Rec^.B; end; end; Dispose(Rec); finally CloseFile(F^); end; Dispose(F); end;

wywołanie:
procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute then WczytajPlik(Tab, Opendialog1.FileName); end;
Użytkownik p1101 edytował ten post 07 luty 2007, 12:54
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •