TWriter / TReader

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mathias
Beiträge: 6912
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

TWriter / TReader

Beitrag von Mathias »

Wieso knallt es, wen ich den TReader inizialisieren will ?
Anstelle von 4096 habe ich schon andere Werte probiert.

Code: Alles auswählen

type
  TDatensatz = record
    ID: integer;
    Name: ansistring;
  end;
 
  TDatenArray = array of TDatensatz;     
 
procedure TForm1.Save2Click(Sender: TObject);
var
  Daten: TDatenArray;
  Stream: TFileStream;
  Writer: TWriter;
  i: integer;
  Len: longint;
begin
  SetLength(Daten, 4);
  Daten[0].ID := 1;
  Daten[0].Name := 'erster Name';
  Daten[1].ID := 2;
  Daten[1].Name := '';
 
  Stream := TFileStream.Create(filename2, fmCreate);
  Writer := TWriter.Create(Stream, 4096);
 
  try
    Len := Length(Daten);
    Writer.WriteInteger(Len);
    for i := 0 to Len - 1 do begin
      Writer.WriteInteger(Daten[i].ID);
      Writer.WriteString(Daten[i].Name);
    end;
  finally
    Writer.Free;
    Stream.Free;
  end;
end;
 
procedure TForm1.Load2Click(Sender: TObject);
var
  Daten: TDatenArray;
  Stream: TFileStream;
  Reader: TReader;
  i: integer;
  Len: longint;
begin
  Stream := TFileStream.Create(filename2, fmOpenRead);
  Reader.Create(Stream, 4096);  // Hier knallt es
  try
    Len := Reader.ReadInteger;
    SetLength(Daten, Len);
 
    for i := 0 to Len - 1 do begin
      Daten[i].ID := Reader.ReadInteger;
      Daten[i].Name := Reader.ReadString;
    end;
  finally
    Reader.Free;
    Stream.Free;
  end;
  for i := 0 to Length(Daten) - 1 do begin
    ShowData(Daten[i]);
  end; 
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: TWriter / TReader

Beitrag von Warf »

Reader := TReader.Create

Aber um mal ehrlich zu sein, wozu brauchst du einen TWriter und TReader? Die sind eigentlich gemacht um Komponenten zu schreiben, für simple Daten reicht doch der normale Filestream, du sparst nichts ob du jetzt WriteBoolean(b) schreibst oder Write(b, Sizeof(b));

Mathias
Beiträge: 6912
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: TWriter / TReader

Beitrag von Mathias »

Reader := TReader.Create
Wohl ein bischen zu weit gesucht. :oops: ¨
Aber um mal ehrlich zu sein, wozu brauchst du einen TWriter und TReader?
Ich wollte es einfach ausprobieren. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: TWriter / TReader

Beitrag von Komoluna »

Manchmal sieht man eben den Baum vor lauter Wäldern nicht...

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Antworten