Как работать с записями, используя файловый поток ввода-вывода вместо «старого» ввода-вывода - PullRequest
0 голосов
/ 09 апреля 2020

Никогда не учился работать с потоками для чтения / записи данных, вместо этого я использую старый Pascal способ. Теперь все говорят, что это неэффективно, и я хотел бы изучить способ потоковой передачи файлов, но не могу по-настоящему работать с доступными учебными пособиями. Я использую Excel для создания и управления наборами данных (большие таблицы данных с одним или двумя заголовками). Я сохраняю их как * .txt файлы (с разделителями табуляции). Эти файлы я читаю с помощью Delphi, чтобы заполнить свои записи и массивы и т. Д. c. Ниже приведен упрощенный пример кода того, что я делаю сейчас. Если имеет смысл заменить это потоками данных, кто-нибудь может дать мне пример кода, как это будет работать? Спасибо - Фред

Type
  TMyRecord = record        // in reality my record file is more complex
     ID : integer;
     Tekst  : string;
     R1 : char;
  end;

Procedure TForm1.FormCreate(Sender: TObject);
var
  MainDir   : string; // local directory of the executable  
  Tfile     : textfile;
  Fname, T  : string;
  N     : integer;
  C     : char;
  MyData    : TMyRecord;
begin
   MainDir := GetCurrentDir;
   Fname := MainDir + '/Data/File1.txt'; // File1.txt = tab delimited text file
   AssignFile(Tfile, Fname);
   N := 0;
   Try
     If FileExists(FName) then begin
       reset(Tfile);
       while not EOF(Tfile) do begin // find number of record lines
         readln(Tfile);
         N := N + 1;    // not used here, but N = total # of records; required to know! 
       end;
       N := N-1; // correct for the header line not used here
       Reset(Tfile);
       Readln(Tfile); // read the header (no record data), skip
       T := '';
       while not EOF(Tfile) do begin
         Read(Tfile, MyData.ID, C); // C = read the tab
         Read(Tfile, C);
         while C <> #9 do begin
           T := T + C;
           Read(Tfile, C);
         end;
         MyData.Tekst := T;
         Read(TFile, MyData.R1);
         Readln(Tfile); // proceed to the next line
       end;
     end;
   Finally
     closefile(Tfile);
...