![]() |
Problem mit #0 in einer Text-Datei beim Laden
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe Datei, die leider in den ersten Zeilen vermutlich das Zeichen #0 drin hat. Ich hab den Kopf der Datei mal angehängt. Wenn ich diese Datei nun in ein Memo, z. B. laden möchte, dann bekomm ich nur die ersten Zeichen - ganz klar, weil ja Strings in Delphi null terminierend sind. Nur wie kann ich ich nun diese Datei trotzdem laden? Was muss ich zuvor per Code tun um diese Datei in ein memo z. b. zu laden? |
Re: Problem mit #0 in einer Text-Datei beim Laden
Hi,
Memos mögen definitiv keine #0. Lade die Datei in einen Stream, entferne alle #0, und übergieb das dann dem Memo. Gruß oki |
Re: Problem mit #0 in einer Text-Datei beim Laden
Zitat:
|
Re: Problem mit #0 in einer Text-Datei beim Laden
Kann man da nicht irgendwie Trim() nutzen?
MFG FC ;) |
Re: Problem mit #0 in einer Text-Datei beim Laden
Nimm nen TStringStream, hol dir den Inhalt aus DataString in eine Stringvariable, gehe zeichenweise durch und ersetze #0 durch #32.
@FabianClassen: Nein, Trim entfernt nur Leerzeichen und Steuerzeichen von Anfang und Ende eines Strings. |
Re: Problem mit #0 in einer Text-Datei beim Laden
Hallo,
Zitat:
|
Re: Problem mit #0 in einer Text-Datei beim Laden
Hallo,
ich hab das jetzt mal versucht hinzuzaubern, nur leider werden mir trotzdem nur die ersten Zeichen gezeigt. Hier mal mein Code. Den Gedanken von nahpets hab ich aufgefasst, und versucht umzusetzen:
Delphi-Quellcode:
Die Version mittels Stringstream und for-Schleife hat nicht funktioniert.
procedure TForm1.Button1Click(Sender: TObject);
const Datei = 'd:\nc_upgrd.txt'; var MemoryStream: TMemoryStream; Position: Integer; S: String; Buffer: Char; begin MemoryStream := TMemoryStream.Create; MemoryStream.LoadFromFile(Datei); MemoryStream.Position := 0; try while MemoryStream.Position < MemoryStream.Size do begin Position := MemoryStream.Read(Buffer, 1); If Buffer = #0 then begin Buffer := #32; MemoryStream.WriteBuffer(Buffer, 1); end; MemoryStream.Position := MemoryStream.Position + Position; end; MemoryStream.Position := 0; ListBox1.Items.LoadFromStream(MemoryStream); finally FreeAndNil(MemoryStream); end; end; |
Re: Problem mit #0 in einer Text-Datei beim Laden
Hi,
einlesen wie jaenicke beschrieben hat. Alle #0 ersetzen mittels:
Delphi-Quellcode:
Für OldPattern #0 und für NewPattern '' oder #32 für Leerzeichen angeben. Flags: rfReplaceAll
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
Gruß oki |
Re: Problem mit #0 in einer Text-Datei beim Laden
Ich denke, so sollte es klappen. Code ungeprüft, Rest selber machen:
Delphi-Quellcode:
Gruß oki
procedure ReadText(AFileName : String);
var FStream : TFileStream; SStream : TStringStream; s : String; begin s := ''; FStream := TFileStream.Create(AFileName); SStream := TStringStream.Create(s); try FStream.Position := 0; SStream.CopyFrom(FStream, FStream.Size); SStream.Position := 0; s := SStream.ReadString(SStream.Size); s := StringReplace(s, #0, '', rfReplaceAll); Memo1.Text := s; finally FreeAndNil(FStream); FreeAndNil(SStream); end; end; |
Re: Problem mit #0 in einer Text-Datei beim Laden
Hallo oki,
danke für den Code! - Irgendwie stand ich auf dem Schlauch. Ich hab jetzt deinen Code genommen, getestet und umgebaut:
Delphi-Quellcode:
StringReplace hat leider nicht funktioniert. Nach StringReplace waren die #0 trotzdem
function ReadText(AFileName : String): String;
var FStream: TFileStream; SStream: TStringStream; S: String; i: Integer; begin S := ''; If not FileExists(AFileName) then exit; FStream := TFileStream.Create(AFileName, fmOpenRead); SStream := TStringStream.Create(S); try FStream.Position := 0; SStream.CopyFrom(FStream, FStream.Size); SStream.Position := 0; S := SStream.ReadString(SStream.Size); // S := StringReplace(S, #0, #32, [rfReplaceAll]); for i := 1 to length(S) do If S[i] = #0 then S[i] := #13; Result := S; finally FreeAndNil(FStream); FreeAndNil(SStream); end; end; noch vorhanden. Die for-Schleife funktioniert und ersetzt die #0 durch #13 (Zeilenumbruch) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 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