AGB  ·  Datenschutz  ·  Impressum  







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

Streams

Ein Thema von Quick_silver · begonnen am 9. Apr 2004 · letzter Beitrag vom 14. Apr 2004
Antwort Antwort
Quick_silver

Registriert seit: 2. Jan 2003
78 Beiträge
 
Delphi 6 Enterprise
 
#1

Streams

  Alt 9. Apr 2004, 10:29
Ich habe bisschen probs das mit den Streams ganz zu verstehen. Hat vielleicht jemand ne Read und Write Procedure, umd ein Array in ne Streamdatei zu schreiben? Eigentlich ganz simpel^^
Naja wenn sich keienr findet werde ich mich wohl oder überl noch nen paar stunden damit beschäftigen. Aber wäre wirklich klasse hier was zu bekommen. Thx.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Streams

  Alt 9. Apr 2004, 11:45
Moin Quick Silver,

ein Beispiel:

Delphi-Quellcode:
var
  fsWork : TFileStream;
  aiDemo : array [1..10] of integer;
  iIndex : integer;

begin
  fsWork := TFileStream.Create('c:\temp\SaveArrayDemo.file',fmCreate or fmOpenWrite);
  try
    for iIndex := low(aiDemo) to high(aiDemo) do begin
      aiDemo[iIndex] := iIndex; // Nur damit auch was in der Datei steht
      fsWork.Write(aiDemo[iIndex],4);
    end;
  finally
    FreeAndNil(fsWork);
  end;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Quick_silver

Registriert seit: 2. Jan 2003
78 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Streams

  Alt 10. Apr 2004, 07:04
Kann mir jetzt noch einer etwas genauer die 4 Erläutern? Die steht doch für irgend ne läger oder ?!?
Und wie kommst du hier gerade auf 4?

Edit: und ne passene Readfunktion dafür wäre hilfreich.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Streams

  Alt 10. Apr 2004, 07:16
Zitat von Quick_silver:
...Und wie kommst du hier gerade auf 4?...
Ich denke mal weil ein Integer 4 Byte lang ist.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Quick_silver

Registriert seit: 2. Jan 2003
78 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Streams

  Alt 10. Apr 2004, 08:52
Gut das schreiben habe ich jetzt glaube ich begriffen Und wie lese ich das ganze in eine variable aus der datei?
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Streams

  Alt 10. Apr 2004, 09:01
Zitat von Quick_silver:
Gut das schreiben habe ich jetzt glaube ich begriffen Und wie lese ich das ganze in eine variable aus der datei?
Hai Quick_silver,

hier mal eine Erweiterung des Beispieles von oben. Du brauchst auf der Form einen Button und eine Memo
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  fsWork : TFileStream;
  aiDemo : array [1..10] of integer;
  iIndex : integer;
  i_deineVariable : Integer;
begin
  fsWork := TFileStream.Create('c:\temp\SaveArrayDemo.file',fmCreate or fmOpenWrite);
  try
    for iIndex := low(aiDemo) to high(aiDemo) do
    begin
      aiDemo[iIndex] := iIndex; // Nur damit auch was in der Datei steht
      fsWork.Write(aiDemo[iIndex],4);
    end;
   //Ab hier wird gelesen
   fsWork.Position := 0; //Den Stream auf die Anfangsposition setzen
   for iIndex := low(aiDemo) to high(aiDemo) do
   begin
     fsWork.Read(i_deineVariable,4); //Die nächsten 4 Byte aus dem Stream lesen
     Memo1.Lines.Add (IntToStr (i_deineVariable)); // Variable im Memo anzeigen
   end;
  finally
    FreeAndNil(fsWork);
  end;
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Streams

  Alt 10. Apr 2004, 09:03
Hier ist ein Tutorial zu dem Thema Streams.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Quick_silver

Registriert seit: 2. Jan 2003
78 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: Streams

  Alt 14. Apr 2004, 08:11
Also weiter. Ich habe das Prinzip jetzt gerallt Aber beim asulesen kommt noch was falsches zurück.

Delphi-Quellcode:

type
   TConnection=record
     user,pass,host:string;
     port:integer;
     auth:boolean;
     end;


//speichern:
procedure TFormMain.Button1Click(Sender: TObject);
var
  Stream: TStream;
begin

Connect_info.user:=edit7.text;
Connect_info.pass:=edit8.text;
Connect_info.host:=edit9.text;
Connect_info.port:=strtoint(edit10.text);
Connect_info.auth:=CheckBox1.enabled;

Stream := TFileStream.Create('h:\Connection.info', fmCreate or fmOpenWrite);
  try
    Stream.Write(Connect_info.user, SizeOf(Connect_info.user)+10);
    Stream.Write(Connect_info.pass, SizeOf(Connect_info.pass)+10);
    Stream.Write(Connect_info.host, SizeOf(Connect_info.host)+10);
    Stream.Write(Connect_info.port, SizeOf(Connect_info.port)+10);
    Stream.Write(Connect_info.auth, SizeOf(Connect_info.auth)+10);
  finally
    Stream.Free;
  end;

//edits leeren und variablen verfälschen. Mache ich nur formal, damit man sieht wenn es NICHT klappt :)

edit7.text:='';
edit8.text:='';
edit9.text:='';
edit10.text:='';

Connect_info.user:='XX';
Connect_info.pass:='XX';
Connect_info.host:='XX';
Connect_info.port:=666;
Connect_info.auth:=false;

end;


//laden:
procedure TFormMain.Button2Click(Sender: TObject);
var Stream: TStream;
begin


Stream := TFileStream.Create('h:\Connection.info', fmOpenRead);
  try
    Stream.Position:=0; //<-- überflüssig hier
    Stream.Read(Connect_info.user, SizeOf(Connect_info.user)+10);
    Stream.Read(Connect_info.pass, SizeOf(Connect_info.pass)+10);
    Stream.Read(Connect_info.host, SizeOf(Connect_info.host)+10);
    Stream.Read(Connect_info.port, SizeOf(Connect_info.port)+10);
    Stream.Read(Connect_info.auth, SizeOf(Connect_info.auth)+10);
  finally
    Stream.Free;
  end;

//Variablen in edits ausgeben
edit7.text:=Connect_info.user;
edit8.text:=Connect_info.pass;
edit9.text:=Connect_info.host;
edit10.text:=inttostr(Connect_info.port);
edit2.text:=inttostr(SizeOf(Connect_info.user));

end;
Aber in den Edits steht hinter den eigentlich inhalten iemr noch ein zeichen doer sie sind unvollständig... Testet es selber. Nachher schicke ich noch ein screen vielleich. Geht jetzt nicht bin in der Schule.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Streams

  Alt 14. Apr 2004, 20:31
Moin Quick Silver,

Dein Problem steckt in dieser Zeile:

user,pass,host:string; String ist nur ein Pointer auf den Inhalt des Wertes, es wird also, unabhängig davon, was in den Feldern steht, immer nur der Pointer auf den String in den Stream geschrieben.

Probier mal string durch array of char zu ersetzen, oder ggf. auch ShortStrings.

Delphi-Quellcode:
user, pass, host: array [1..20] of char;

// oder
user, pass,host: String[20];
20 ist natürlich nur ein Beispiel.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  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 07:17 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