Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi txt-file einlesen und bearbeiten (https://www.delphipraxis.net/10521-txt-file-einlesen-und-bearbeiten.html)

jority 20. Okt 2003 14:48


txt-file einlesen und bearbeiten
 
hi ihr lieben,
ich möchte/muss eine txt-file einlesen und beaerbeiten.
ich lese sie zeilenweise ein und zwar so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var f:textfile;
    i:integer;
    s:string;
begin
      assignfile(f,'c:\test.txt');
      reset(f);
     i:=0;
      while not EOF(f) do begin
        readln(f,s);
        memo1.Lines.Add(s);
        inc(i)
      end;
so, da es sich um eine txt-file handelt mit einem komischen format möchte ich "nur" die ascii zeichen
32 bis 126 anzeigen bzw. alle anderen rausschmeißen.
weiß da jemand ne lösung? hab leider noch nie mit dem auslesen von txt-dateien gearbeitet und brauche jetzt hilfe :cry:
ich hoffe mir kann jemand helfen.
gruß
Jority

[edit=sakura]Bitte Delphi.Tags nutzen! Mfg, sakura[/edit]

Tanadirian 20. Okt 2003 15:06

Re: txt-file einlesen und bearbeiten
 
Hmm... du könntest
Delphi-Quellcode:
hlpstr:='';
for i:=1 to length(s) do
begin
 if s[i] in [#32...#126] then hlpstr:=hlpstr+s[i];
end;
next;
nach
Delphi-Quellcode:
readln(f,s);
einfügen dann müsste es eigentlich gehen!

Christian Seehase 20. Okt 2003 15:11

Re: txt-file einlesen und bearbeiten
 
Moin Jority,

das Einlesen kannst Du Dir schon mal vereinfachen:
(Voraussetzung: Das Memo soll nicht nur ergänzt werden)

Delphi-Quellcode:
Memo1.Lines.LoadFromFile(....);

So könnte es gehen:

Delphi-Quellcode:
var
  sBuf : string;
  iIN : integer;
  iOUT : integer;

begin
  // Die Anzeige erst einmal unterdrücken
  Memo1.Lines.BeginUpdate;
  try
    // Datei laden
    Memo1.Lines.LoadFromFile('c:\temp\test.txt');
    // In Buffer übernehmen, da das Ansprechen von Text die Geschwindigkeit drückt
    // (wird jedesmal aus den Lines zusammengesetzt
    sBuf := Memo1.Lines.Text;
    // Hierhin die gültigen Zeichen schreiben
    iOUT := 1;
    // Alle Zeichen durchgehen
    for iIN := 1 to length(sBuf) do begin
      // nicht gültig, dann nächstes Zeichen
      if not (sBuf[iIN] in [#10,#13,#32..#126]) then continue;
      // Zeichen übertragen
      sBuf[iOUT] := sBuf[iIN];
      // Auf nächste freie Stelle
      inc(iOUT);
    end;
    // Die gültigen Zeichen wieder zurückschreiben
    Memo1.Lines.Text := copy(sBuf,1,iOUT-1);
  finally
    // Text anzeigen
    Memo1.Lines.EndUpdate;
  end;
end;
Da bei der Bearbeitung keine Zeichen eingefügt werden, können Quell- und ZielBuffer identisch sein.
Die Zeichen #13#10 stellen den Zeilenvorschub dar, und sollten auch erhalten bleiben.

Dannyboy 20. Okt 2003 15:17

Re: txt-file einlesen und bearbeiten
 
Servus,
Du solltest Dir die Strings erst mal in einer Zwischenvariable speichern und diese dann
modifizieren, bevor Du sie dann verändert an das Memo weiter gibst. Sieh mal in der Hilfe unter
String-Verarbeitung nach. Dort findest Du dann diverse Funktionen wie delete, concat,
pos, etc.,. Das ist alles, was Du benötigst, um die überflüssigen Zeichen rauszukicken.

Gruß
DANNYBOY

jority 20. Okt 2003 15:23

Re: txt-file einlesen und bearbeiten
 
hi,
geht leider so auch nicht.
also im prinzip soll das alles sowieso nicht im memo angezeigt werden hatte das jetzt nur zum testen.
eigentlich soll es so aussehen:
datei einlesen
bearbeiten bzw. ungültige zeichen rausschmeißen
datei erstmal unter neuem namen speichern

so sollte es sein bekomme das aber irgendwie nicht so hin
bei deinem code chris ist es so das im memo nur dies steht: "
und das war es dann.
und wenn ich es dann speichern will hab ich eben genau diese anführungsstriche in der neuen txt und sonst nichts.
habt ihr vielleicht noch eine idee?
ich bin am ende!

gruß jority

Christian Seehase 20. Okt 2003 15:33

Re: txt-file einlesen und bearbeiten
 
Moin Jority,

dann möchte ich fast mal annehmen, dass Du eine Unicode Datei vorliegen hast.

Zum einlesen wäre dann ein FileStream geeignet:

Delphi-Quellcode:
var
  fsWork : TFileStream;
  // Weitere Variablen wie oben

begin
  fsWork := TFileStream.Create('c:\temp\test.txt',fmOpenRead);
  try
    sBuf := StringOfChar(#00,fsWork.Size);
    fsWork.Read(sBuf[1],fsWork.Size);
  finally
    FreeAndNil(fsWork);
  end;
  // Verarbeitung wie oben beschrieben
  fsWork := TFileStream.Create('c:\temp\testneu.txt',fmCreate);
  try
    fsWork.Write(sBuf[1],iOUT-1);
  finally
    FreeAndNil(fsWork);
  end;
end;
BTW: Vielleicht wäre es noch ganz sinnvoll #09 (Tabulator) mit in die gültigen Zeichen aufzunehmen.

jority 21. Okt 2003 07:37

Re: txt-file einlesen und bearbeiten
 
hi,
das ist genau das was ich gebraucht habe Chris,
aber natürlich auch dank an die anderen beiden mithelfer! :cheers:
so jetzt steht wenigstensen schonmal der größte teil des Programms!

also danke nochmal wäre da echt nicht weitergekommen.

gruß Jority :-D

AndreT 16. Feb 2006 15:06

Re: txt-file einlesen und bearbeiten
 
Hat sich erledigt.

:duck:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 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