AGB  ·  Datenschutz  ·  Impressum  







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

Probleme beim Stream Laden

Ein Thema von SaFu · begonnen am 14. Feb 2007 · letzter Beitrag vom 14. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#1

Probleme beim Stream Laden

  Alt 14. Feb 2007, 17:32
Hi

Irgendwas stimmt beim laden meines Streams nicht, beim Speichern wird alles sauber gespeichert beim laden werden alle Daten des StringGrids auch sauber geladen nur die Memos und Labels erhalten nur nicht mach ich was falsch in der Reihenfolge??.

Hab mal bilder angehängt mit der eingabe und was beim laden raus kommt.


Stream Speichern

Delphi-Quellcode:
 {Stream Speichern} 
procedure TForm7.memospeichern;
var FileStream: TMemoryStream;
    memos :TFileName;
    x, y, row, col,len :Word;
    a,c,e,g,i,k,m,o,q,s :String;
    b,d,f,h,j,l,n,p,r,t :integer;
begin
  a:= Memo1.Text; b:=Length(a);
  c:= Memo2.Text; d:=Length(c);
  e:= Memo3.Text; f:=Length(e);
  g:= Memo4.Text; h:=Length(g);
  i:= Memo5.Text; j:=Length(i);
  k:= Memo6.Text; l:=Length(k);
  m:= Label8.Caption; n:=Length(m);
  o:= Label10.Caption; p:=Length(o);
  q:= Label3.Caption; r:=Length(q);
  s:= Label1.Caption; t:=Length(s);

  FileStream:= TMemoryStream.Create;

    col:= StringGrid1.ColCount -1;
    row:= StringGrid1.RowCount -1;

    FileStream.Write(row, SizeOf(Word));
    FileStream.Write(col, SizeOf(Word));

    for x:= 0 to row do
      for y:= 0 to col do
       begin
        buff:= StringGrid1.Cells[y,x];
        len:= length(buff);

        FileStream.Write(len, SizeOf(Word));
        FileStream.Write(buff[1], len);
       end;

  FileStream.Write(b, SizeOf(Integer)); // Memo1
  FileStream.Write(a[1], b);

  FileStream.Write(d, SizeOf(Integer)); // Memo2
  FileStream.Write(c[1], d);

  FileStream.Write(f, SizeOf(Integer)); // Memo3
  FileStream.Write(e[1], f);

  FileStream.Write(h, SizeOf(Integer)); // Memo4
  FileStream.Write(g[1], h);

  FileStream.Write(j, SizeOf(Integer)); // Memo5
  FileStream.Write(i[1], j);

  FileStream.Write(l, SizeOf(Integer)); // Memo6
  FileStream.Write(k[1], l);

  FileStream.Write(n, SizeOf(Integer)); // Label8
  FileStream.Write(m[1], n);

  FileStream.Write(p, SizeOf(Integer)); // Label10
  FileStream.Write(o[1], p);

  FileStream.Write(r, SizeOf(Integer)); // Label3
  FileStream.Write(q[1], r);

  FileStream.Write(t, SizeOf(Integer)); // Label1
  FileStream.Write(s[1], t);

  memos:= ExtractFilePath(ParamStr(0))+'Bemerkungen\'+ ComboBox4.Text+'.txt';
  FileStream.SaveToFile(memos);
  FileStream.Free;
end;
Stream Laden

Delphi-Quellcode:
 {Stream Laden} 
procedure TForm7.memoladen;
var x, y, row, col,len :Word;
  memos :TFileName;
  FileStream :TMemoryStream;
  i,l :Integer;
  s :String;
begin
  FileStream := TMemoryStream.Create;
  memos:=ExtractFilePath(ParamStr(0))+'Bemerkungen\'+ ComboBox3.Text+'.txt';
  FileStream.LoadFromFile(memos);

  FileStream.Read(row, SizeOf(Word));
  FileStream.Read(col, SizeOf(Word));

  for x:= 0 to row do
   for y:= 0 to col do
    begin
     FileStream.Read(len, SizeOf(Word));
     SetLength(buff, len);
     FileStream.Read(buff[1], len);
     StringGrid1.Cells[y,x]:= buff;
    end;
  
  l := 0;
  FileStream.Position:=0;

  for i := 1 to 10 do
  begin
    FileStream.Read(l, SizeOf(Integer));
    setlength(s, l); // legt die Länge einer String- Variable fest
    FileStream.Read(s[1], l);

    case i of
      1: Memo1.Text:= s;
      2: Memo2.Text:= s;
      3: Memo3.Text:= s;
      4: Memo4.Text:= s;
      5: Memo5.Text:= s;
      6: Memo6.Text:= s;
      7: Label8.Caption:= s;
      8: Label10.Caption:= s;
      9: Label3.Caption:= s;
     10: Label1.Caption:= s;
    end;

  end;
  FileStream.Free;
end;
Miniaturansicht angehängter Grafiken
nachher_129.jpg  
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Probleme beim Stream Laden

  Alt 14. Feb 2007, 17:33
upps vorher vergessen
Miniaturansicht angehängter Grafiken
vorher_429.jpg  
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Probleme beim Stream Laden

  Alt 14. Feb 2007, 17:46
Also wenn ich deinen Code so anschaue, tun mir die Augen weh.
Delphi-Quellcode:
  FileStream.Write(b, SizeOf(Integer)); // Memo1
  FileStream.Write(a[1], b);

  FileStream.Write(d, SizeOf(Integer)); // Memo2
  FileStream.Write(c[1], d);
....
Wie wäre es denn, wenn du eine Unterfunktion schreiben würdest ??!!
procedure SaveAnsiStringToStream(stream:TStream; const s:AnsiString); Und bitte danach die ganzen unnötigen Variablen a,b,c,d,... entsorgen.
Danach ist der Code so vereinfacht, dass Reihenfolgefehler sofort auffallen.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Probleme beim Stream Laden

  Alt 14. Feb 2007, 18:08
Die Variablen brauch man doch für den String oder??

hab mal ne eigene Procedure geschrieben geht Trotzdem nicht vielleicht liegt es doch am speichern bekomm auch keine Fehler meldung.
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Probleme beim Stream Laden

  Alt 14. Feb 2007, 18:18
@fuknersascha: Nutze zukünftig bitte um deinen Beitrag zu ändern bzw. einen vergessenen Anhang hinzu zufügen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Probleme beim Stream Laden

  Alt 14. Feb 2007, 18:52
Zitat von fuknersascha:
Die Variablen brauch man doch für den String oder??
Hast du überhaupt verstanden was shmia von dir wollte???
Du sollst eine Routine schreiben, die du für jedes Memo und Label einmal aufrufst um zu speichern!!!
Wenn du das gemacht hast, dann kannst du eine kongruente Routine zum Laden der Labels und Memos schreiben... und wenn dann immer noch was nicht geht, kannst du deinen (dann hoffentlich sauberen und ordentlichen) code nochmal posten!

Da wird bestimmt auch einer gewillt sein sich das durchzulesen und ggf. dich auf Fehler aufmerksam zu machen

Edit: Was mir grad auffällt! Du speicherst doch nur Strings, oder?
Dann wäre es doch viel, viel einfacher, wenn du sie einfach nur alle in ein Memo kopierst und dann als txt-datei speicherst!
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Probleme beim Stream Laden

  Alt 14. Feb 2007, 18:58
Sorry aber leider habe ich nicht soviel erfahrung mit dem Programmieren und muss mir eigentlich alles mühsam zusammen lesen und verstehen leider finde ich nicht alles was ich zum finden und lösen meiner fehler brauche.

Bin eigentlich noch Blutiger anfänger

Das was seiner meinung nach hilfsVarialblen sein sollen, habe ich so nach gelesen das man die brauch wenn man einen String in einem Stream speichern möchte.

Bin gerne für verbesserungen offen
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Probleme beim Stream Laden

  Alt 14. Feb 2007, 19:08
Ich find das mit den Streams hier zu arg, wenn du dich da nicht wirklich auskennst...

Ich würde wie gesagt die Inhalte (Strings) deiner Labels, Memos und weis der Geier... in einer bestimmten Reihenfolge hintereinander (Zeile für Zeile) in ein Memo kopieren und dieses per SaveToFile abspeichern! Da entfällt zugleich dieses blöde Angeben der Stringlänge immer, welches beim als Stream abspeichern nötig ist, weg, da ja jeder String in einer neuen Zeile stehen würde!

Und wenn du extrem Faul bist und es dir total egal ist, wie es programmiert ist dann kannst du die Komponenten auch im ganzen abspeichern. Wenn du nicht verstehst, was ich meine oder du einfach darin interessiert bist, wie das geht, dann kannst du ja mal hier bei dsdt.info reinschauen!
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Probleme beim Stream Laden

  Alt 14. Feb 2007, 19:19
Das sind super vorschläge werde mich wahrscheinlich noch um das letzte mal kümmern.

Denn es ist wirklich egal wie es Programmirt ist.

Aber nochmal zu verständnis wenn ich jetzt meine Komponenten inhalte speicher stehen sie im Klartext in der endsprechenden Datei. Das heist das das speicher des Streams funktioniert hat oder bin ich da auf dem Holzweg
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Probleme beim Stream Laden

  Alt 14. Feb 2007, 19:28
Hallo,
in grauer Vorzeit habe ich mir für das Lesen und Schreiben von Strings in einen Stream zwei Nachfahren gebastelt.
Delphi-Quellcode:
uses Sysutils, Classes;

Type

  TMemoryStreamExt = class(TMemoryStream)
  public
    procedure WriteStringToStream(aStr : String);
    function ReadStringFromStream : String;
  end;

  TFileStreamExt = class(TFilestream)
  public
    procedure WriteStringToStream(aStr : String);
    function ReadStringFromStream : String;
  end;



implementation


{ TFileStreamExt }

procedure TFileStreamExt.WriteStringToStream(aStr : String);
var
   aStrLen : Integer;
begin
  aStrLen:=Length(aStr);
  WriteBuffer(aStrLen,SizeOf(Integer));
  WriteBuffer(Pointer(aStr)^,aStrLen);
end;

function TFileStreamExt.ReadStringFromStream: String;
var
   aStrLen : Integer;
begin
  ReadBuffer(aStrLen,SizeOf(Integer));
  SetLength(Result,aStrLen);
  ReadBuffer(Pointer(Result)^,aStrLen);
end;

{ TMemoryStreamExt }

function TMemoryStreamExt.ReadStringFromStream: String;
var
   aStrLen : Integer;
begin
  ReadBuffer(aStrLen,SizeOf(Integer));
  SetLength(Result,aStrLen);
  ReadBuffer(Pointer(Result)^,aStrLen);
end;

procedure TMemoryStreamExt.WriteStringToStream(aStr: String);
var
   aStrLen : Integer;
begin
  aStrLen:=Length(aStr);
  WriteBuffer(aStrLen,SizeOf(Integer));
  WriteBuffer(Pointer(aStr)^,aStrLen);
end;


end.
In der richtigen Reihenfolge muss natürlich auch hier gelesen werden.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:46 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