Autor Téma: Přístup k datům v souborech  (Přečteno 503 krát)

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 752
  • Karma: 42
    • Verze Delphi: 10.3
Re:Přístup k datům v souborech
« Odpověď #15 kdy: 22-08-2019, 20:36:48 »
Delphi umí (nevím ale od jaké verze):

Kód: Delphi [Vybrat]
  1. var Pole: array of tRec;
  2.  
  3. SetLength(Pole, 10);
  4. for i:=Low(Pole) to High(Pole) do...
  5. SetLength(Pole, length(Pole)+5);

No a dřív se to dělalo např.:
Kód: Delphi [Vybrat]
  1. type tPole=array[0..999] of tRec;
  2.      pPole=^tPole;
  3. var Pole: pPole;
  4.  
  5. GetMem(Pole, 10*sizeof(tRec));
  6. for i:=0 to 9 do Pole^[i].x:=...
  7. FreeMem(Pole);

Offline Faltynek

  • Plnoletý
  • ***
  • Příspěvků: 177
  • Karma: 2
    • Verze Delphi: D5 Enterprise, D2009
Re:Přístup k datům v souborech
« Odpověď #16 kdy: 22-08-2019, 20:51:43 »
Jo, něco podobného jsem právě našel na googlu, s tím že lowbound je vždycky 0.

Dalik.
Dalibor (D2009 Enterprise, dřív D5Enterprise)

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1428
  • Karma: 34
    • Pepak.net
Re:Přístup k datům v souborech
« Odpověď #17 kdy: 23-08-2019, 16:21:50 »
Delphi umí (nevím ale od jaké verze):
Myslím od Delphi 4. V Delphi 5 už to 100% je.

Offline Faltynek

  • Plnoletý
  • ***
  • Příspěvků: 177
  • Karma: 2
    • Verze Delphi: D5 Enterprise, D2009
Re:Přístup k datům v souborech
« Odpověď #18 kdy: 24-08-2019, 12:21:44 »
Tak jsem to zkusil a funguje to pěkně oběma způsoby.
Kód: Delphi [Vybrat]
  1. procedure TForm2.Button2Click(Sender: TObject);
  2. Type TMerfile = file of TMrec;
  3. var pocetmist, cyk, misto: integer;
  4.     mrecpole: array of tmrec;
  5.     Merfile: Tmerfile;
  6.  
  7. begin
  8.   SetLength(mrecPole, 10);
  9.   AssignFile(Merfile, 'd:\Vyvoj\Mer2014_D2009_beta\AKCE\Unipetrol_K18_pred\M-13.2.2018 9_00_38.mer');
  10.   pocetmist:=10;
  11.   cyk:=1;
  12.   reset(Merfile); // otevře soubor naměřených hodnot
  13.   seek(Merfile, (cyk-1)*pocetmist);  // najde konec souboru
  14.   for misto:=1 to pocetmist do read(Merfile, Mrecpole[misto-1]);
  15.   CloseFile(Merfile);
  16.   for misto:=1 to pocetmist do
  17.     memo1.Lines.Add(datetimetostr(Mrecpole[misto-1].cas1) + '; ' + floattostr(Mrecpole[misto-1].mfyz1));
  18.   SetLength(mrecPole, 0);
  19. end;
  20.  
  21. procedure TForm2.Button3Click(Sender: TObject);
  22. var misto: integer;
  23.     mrecpole: array of tmrec;
  24.     fs: TFileStream;
  25.     i: integer;
  26.  
  27. begin
  28.   SetLength(mrecPole, 10);
  29.   fs := TFileStream.Create('d:\Vyvoj\Mer2014_D2009_beta\AKCE\Unipetrol_K18_pred\M-13.2.2018 9_00_38.mer', fmOpenRead);
  30.   try
  31.     fs.Seek(0*sizeof(TMrec), soBeginning);
  32.     fs.Read(mrecpole[0], 10*sizeof(mrecpole[0])); // nacte 10 zaznamu najednou
  33.   finally
  34.     fs.Free;
  35.   end;
  36.   for misto:=1 to 10 do
  37.     memo1.Lines.Add(datetimetostr(Mrecpole[misto-1].cas1) + '; ' + floattostr(Mrecpole[misto-1].mfyz1));
  38.   SetLength(mrecPole, 0);
  39. end;
  40.  

Ale v čem je výhoda streamu, když pominu hezčí zápis?

Dalibor.
Dalibor (D2009 Enterprise, dřív D5Enterprise)

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 752
  • Karma: 42
    • Verze Delphi: 10.3
Re:Přístup k datům v souborech
« Odpověď #19 kdy: 24-08-2019, 12:26:25 »
Ale v čem je výhoda streamu, když pominu hezčí zápis?

Beru to jako další úroveň, jak oddělit fyzické uložení dat od programu, který je zpracovává. Můžeš předat stream jako parametr a rutina, která s ním pracuje, ani neví, zda jsou data jen v paměti, na disku apod. a pracuje s nimi pořád stejně.

Offline Faltynek

  • Plnoletý
  • ***
  • Příspěvků: 177
  • Karma: 2
    • Verze Delphi: D5 Enterprise, D2009
Re:Přístup k datům v souborech
« Odpověď #20 kdy: 24-08-2019, 19:03:06 »
Aha.
Dalibor (D2009 Enterprise, dřív D5Enterprise)