Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Einlesen von Werten bei TFilestream (https://www.delphipraxis.net/62720-einlesen-von-werten-bei-tfilestream.html)

konda 8. Feb 2006 16:18


Einlesen von Werten bei TFilestream
 
:cyclops: Hallo, ich beschäftige mich seit einiger Zeit mir Streams. Ich wollte das mal ausprobieren, aber wenn ich versuche die 2.Zahl zu lesen, liefert das Programm mir immer nur den wert der ersten Zahl; Was mache ich falsch? :?:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var stream: tstream;
    zahl,zahl1: integer;
begin
  stream:= tfilestream.Create('C:\test.hen', (fmcreate or fmOpenWrite));
  zahl:= strtoint(edit1.Text);
  zahl1:= strtoint(edit1.Text)+1;
  try
    stream.Write(zahl,sizeof(zahl));
    stream.Write(zahl1,sizeof(zahl1));
  finally
    stream.free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var stream: tstream;
    zahl: integer;
begin
  stream:= tfilestream.Create('c:\test.hen', fmopenread);
  try
    stream.read(zahl, sizeof(zahl));
  finally
    stream.Free;
  end;
  label1.caption:= inttostr(zahl);
end;

procedure TForm1.Button3Click(Sender: TObject);
var stream: tstream;
begin
  stream:= tfilestream.Create('c:\test.hen', fmopenread);
  try
    stream.read(zahl1, sizeof(zahl1));
  finally
    stream.Free;
  end;
  label2.caption:= inttostr(zahl1);
end;

turboPASCAL 8. Feb 2006 16:23

Re: Einlesen von Werten bei TFilestream
 
Du musst den Datei- bzw. Stream zeiger auf die aktuelle Position setzen, das Read fängt immer beim Datei- bzw. Streambegin an also an der Position 0.

Code:
procedure TForm1.Button3Click(Sender: TObject);
var Stream: TFileStream;
    Zahl, Zahl1: Integer;
begin
  Stream:= TFileStream.Create('c:\test.dat', fmOpenRead);
  try
    [color=#ff0000][b]Stream.Seek[/b][/color](soFromBeginning, SizeOf(Zahl));
    stream.Read(zahl1, SizeOf(zahl1));
  finally
    Stream.Free;
  end;
  Label2.Caption:= IntToStr(zahl1);
end;
[oh]Seek, TFileStream.Seek, TStream.Seek[/oh]

konda 9. Feb 2006 13:16

Re: Einlesen von Werten bei TFilestream
 
:thumb: Klappt, aber wie mache ich es dann bei 3 oder mehr Zahlen? :gruebel:

marabu 9. Feb 2006 13:24

Re: Einlesen von Werten bei TFilestream
 
Hi.

Speichere zuerst die Anzahl der Zahlen, dann kannst du sie so einlesen:

Delphi-Quellcode:
uses
  Types;

procedure TForm1.Button3Click(Sender: TObject);
var
  stream: TFileStream;
  anzahl: Integer;
  zahlen: TIntegerDynArray;
begin
  stream := TFileStream.Create('c:\test.dat', fmOpenRead);
  try
    stream.Read(anzahl, SizeOf(anzahl));
    SetLength(zahlen, anzahl);
    stream.Read(zahlen[0], SizeOf(Integer) * anzahl);
  finally
    Stream.Free;
  end;
  Label2.Caption := IntToStr(anzahl);
end;
Grüße vom marabu

konda 9. Feb 2006 13:43

Re: Einlesen von Werten bei TFilestream
 
Und wie lautet der Code zum schreiben dazu, denn beimir kommt da immer irgendeine expections meldung. :?:

marabu 9. Feb 2006 13:49

Re: Einlesen von Werten bei TFilestream
 
Vielleicht so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  stream: tstream;
  i, zahl: integer;
  zahlen: TIntegerDynArray;
begin
  SetLength(zahlen, 5);
  for i := Low(zahlen) to High(zahlen) do
    zahlen[i] := Random(1000);
  stream:= tfilestream.Create('C:\test.hen', (fmcreate or fmOpenWrite));
  try
    zahl := Length(zahlen);
    stream.Write(zahl, sizeof(zahl));
    stream.Write(zahlen[0], Length(zahlen) * SizeOf(Integer));
  finally
    stream.free;
  end;
end;
marabu

konda 10. Feb 2006 14:08

Re: Einlesen von Werten bei TFilestream
 
So klappts prima! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz