AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Einlesen von Werten bei TFilestream

Ein Thema von konda · begonnen am 8. Feb 2006 · letzter Beitrag vom 10. Feb 2006
Antwort Antwort
Benutzerbild von konda
konda

Registriert seit: 20. Dez 2005
253 Beiträge
 
Turbo Delphi für Win32
 
#1

Einlesen von Werten bei TFilestream

  Alt 8. Feb 2006, 16:18
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;
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: Einlesen von Werten bei TFilestream

  Alt 8. Feb 2006, 16:23
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]
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von konda
konda

Registriert seit: 20. Dez 2005
253 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Einlesen von Werten bei TFilestream

  Alt 9. Feb 2006, 13:16
Klappt, aber wie mache ich es dann bei 3 oder mehr Zahlen?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Einlesen von Werten bei TFilestream

  Alt 9. Feb 2006, 13:24
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
  Mit Zitat antworten Zitat
Benutzerbild von konda
konda

Registriert seit: 20. Dez 2005
253 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Einlesen von Werten bei TFilestream

  Alt 9. Feb 2006, 13:43
Und wie lautet der Code zum schreiben dazu, denn beimir kommt da immer irgendeine expections meldung.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Einlesen von Werten bei TFilestream

  Alt 9. Feb 2006, 13:49
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
  Mit Zitat antworten Zitat
Benutzerbild von konda
konda

Registriert seit: 20. Dez 2005
253 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Einlesen von Werten bei TFilestream

  Alt 10. Feb 2006, 14:08
So klappts prima!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz