AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem mit #0 in einer Text-Datei beim Laden
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit #0 in einer Text-Datei beim Laden

Ein Thema von Helmi · begonnen am 17. Apr 2009 · letzter Beitrag vom 18. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#1

Problem mit #0 in einer Text-Datei beim Laden

  Alt 17. Apr 2009, 19:46
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?
Angehängte Dateien
Dateityp: txt nc_upgrd_-_kopie__2__138.txt (632 Bytes, 2x aufgerufen)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Problem mit #0 in einer Text-Datei beim Laden

  Alt 17. Apr 2009, 20:02
Hi,

Memos mögen definitiv keine #0. Lade die Datei in einen Stream, entferne alle #0, und übergieb das dann dem Memo.

Gruß oki
42
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Problem mit #0 in einer Text-Datei beim Laden

  Alt 17. Apr 2009, 20:04
Zitat von oki:
Memos mögen definitiv keine #0. Lade die Datei in einen Stream, entferne alle #0, und übergieb das dann dem Memo.
mmmh - ich will ja jetzt ned aufdringlich wirken, aber wie kann ich in einem Stream die #0 löschen?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
FabianClassen

Registriert seit: 8. Apr 2009
Ort: Schleiden
57 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Problem mit #0 in einer Text-Datei beim Laden

  Alt 17. Apr 2009, 20:10
Kann man da nicht irgendwie Trim() nutzen?

MFG
FC
Fabian Claßen
Eins habe ich erkannt - ich werde immer Schüler bleiben, ein Leben lang
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Problem mit #0 in einer Text-Datei beim Laden

  Alt 17. Apr 2009, 20:17
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

Re: Problem mit #0 in einer Text-Datei beim Laden

  Alt 17. Apr 2009, 20:23
Hallo,
Zitat von Helmi:
Zitat von oki:
Memos mögen definitiv keine #0. Lade die Datei in einen Stream, entferne alle #0, und übergieb das dann dem Memo.
mmmh - ich will ja jetzt ned aufdringlich wirken, aber wie kann ich in einem Stream die #0 löschen?
schlimmstenfalls musst Du den Stream byteweise durchgehen und per Case auf #0 abfragen und in dem Fall dann z. B. durch #32 ersetzen. Sprich, eine Forschleife könnte da schon ausreichen.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Problem mit #0 in einer Text-Datei beim Laden

  Alt 17. Apr 2009, 21:54
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:
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;
Die Version mittels Stringstream und for-Schleife hat nicht funktioniert.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Problem mit #0 in einer Text-Datei beim Laden

  Alt 17. Apr 2009, 22:12
Hi,

einlesen wie jaenicke beschrieben hat. Alle #0 ersetzen mittels:
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string; Für OldPattern #0 und für NewPattern '' oder #32 für Leerzeichen angeben. Flags: rfReplaceAll

Gruß oki
42
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Problem mit #0 in einer Text-Datei beim Laden

  Alt 17. Apr 2009, 22:25
Ich denke, so sollte es klappen. Code ungeprüft, Rest selber machen:
Delphi-Quellcode:
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;
Gruß oki
42
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Problem mit #0 in einer Text-Datei beim Laden

  Alt 18. Apr 2009, 09:16
Hallo oki,

danke für den Code! - Irgendwie stand ich auf dem Schlauch.

Ich hab jetzt deinen Code genommen, getestet und umgebaut:

Delphi-Quellcode:
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;
StringReplace hat leider nicht funktioniert. Nach StringReplace waren die #0 trotzdem
noch vorhanden.
Die for-Schleife funktioniert und ersetzt die #0 durch #13 (Zeilenumbruch)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  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 11:58 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