AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fehler beim String-streamen [Erledigt]
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler beim String-streamen [Erledigt]

Ein Thema von Thorben86 · begonnen am 1. Dez 2004 · letzter Beitrag vom 2. Dez 2004
Antwort Antwort
Thorben86

Registriert seit: 20. Nov 2003
Ort: Brühl
365 Beiträge
 
Delphi 2005 Personal
 
#1

Fehler beim String-streamen [Erledigt]

  Alt 1. Dez 2004, 22:23
Hi, ich möchte nen String in ne TXt-Datei streamen (so dass dann da normaler text steht)(der string soll vorger verändert werden, darum geht das memo1.savetofile nit)

Hab hier im forum auch gesucht und bin fündig gworden.

Mein Code sieht nun folgendermaßen aus
Delphi-Quellcode:
procedure TForm1.SaveToFile(FileName: String);
var
  Stream: TFileStream;
  Text: String;
  TextLen,i: Integer;
begin

   Stream := TFileStream.Create(FileName, fmCreate);
        for i := 0 to memo1.Lines.Count do
      begin
         TextLen:=Length(memo1.Lines.Strings[i]);
         Stream.WriteBuffer(TextLen,SizeOf(Integer));
         Stream.WriteBuffer(Pointer(Text)^,TextLen);
      end; <--Hier fehlermeldung
   stream.Destroy;
end;
der stürzt aber immer mit er Exception Stream-Write-Error ab, sobalt der in die for-Schleife geht und zeigt mir dann als Fehlerstelle das end;

Was mache ich hierbei falsch?
  Mit Zitat antworten Zitat
ALTF4
(Gast)

n/a Beiträge
 
#2

Re: Fehler beim String-streamen (stream-write-error)

  Alt 1. Dez 2004, 22:42
Versuche mal for i := 0 to memo1.Lines.Count -1 do
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Fehler beim String-streamen (stream-write-error)

  Alt 1. Dez 2004, 22:44
Lass die Schleife mal bis Count-1 laufen. Count Zeilen gibt es nicht. Es wird bei null angefangen zu zählen. Und dann fehlt der Ressourcenschutzblock und nimm nicht die Methode Destroy zum Freigeben des Streams, sondern Free bzw. FreeAndNil. Free prüft vorher, ob das Objekt auch existiert. Destroy tut das nicht und wenn es nicht erzeugt werden konnte, fliegt dir bei Destroy alles um die Ohren:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream : TFileStream;
  Text : string;
  TextLen, i : Integer;
begin
  Text := 'Hello World';
  Stream := TFileStream.Create('d:\test.txt', fmCreate);
  try
    for i := 0 to 10 do
    begin
      TextLen := i;
      Stream.WriteBuffer(TextLen, SizeOf(Integer));
      Stream.WriteBuffer(Pointer(Text)^, length(Text));
    end;
  finally
    FreeAndNil(stream);
  end;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Thorben86

Registriert seit: 20. Nov 2003
Ort: Brühl
365 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Fehler beim String-streamen (stream-write-error)

  Alt 1. Dez 2004, 22:53
Der fehler lag woanders, ich hab zwar die lenge des strings geprüft, der variable text aber nicht den String gegeben
  Mit Zitat antworten Zitat
Thorben86

Registriert seit: 20. Nov 2003
Ort: Brühl
365 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Fehler beim String-streamen (stream-write-error)

  Alt 1. Dez 2004, 22:57
Allerdings schreibt der jetzt an den anfang immer so en symbol und ein paar leerzeichen
 1 ---> 3 1 ---> 2 kann man das irgendwie verhindern, und wie kann ich da angeben, dass der eine neue zeile nimmt., normal würd ich dass ja über #13 machen, wüsst aber nit, wei ich dass da einbringen sollte?



Edit:
de zeichen vorher kann ich entfernen, indem ich beim schreiben folgende zeile wecklasse

Delphi-Quellcode:
Stream.WriteBuffer(TextLen,SizeOf(Integer));<-- die lass ich weg
Stream.WriteBuffer(Pointer(Text)^,TextLen);
der trägt das alles ein, nur dass er die überflüssigen zeichen am anfang jeweils wecklässt. Warum wird dass dann überhaupt verwendet?

Edit2: hatte was beim zeilenumbruch vergessen
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Fehler beim String-streamen [Erledigt]

  Alt 2. Dez 2004, 06:51
Hoi

Es wäre besser, wenn Du dir eine zweite StringList nimmst und die Memo1.Lines da reinkopierst. Dort kannst Du dann deine Änderungen vornehmen und die Strings schliesslich wie beim Memo mit SaveToFile speichern. Ein FileStream ist eher für binäre Daten gedacht.

Gruss
Shaman
Daniel Pauli
Looking for answers from the great beyond
  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 06:43 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