Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zeile aus Datei in Textdatei schreiben (https://www.delphipraxis.net/59016-zeile-aus-datei-textdatei-schreiben.html)

Xenonz 15. Dez 2005 22:06


Zeile aus Datei in Textdatei schreiben
 
Hallo!
Ich habe eine Batch Datei, die mit Delphi aufgerufen wird. Nun möchte ich jedoch den Code durch Delphi eigene Mittel ersetzen. Wie kann ich eine Zeile aus einer Textdatei suchen und diese Zeile in eine andere Textdatei (kann auch eine .ini sein) einfügen? Mit batch sah das ganze so aus:

FIND /N /I "name" personen.txt >> namen.txt

Mfg Xenonz

chaosben 16. Dez 2005 05:19

Re: Zeile aus Datei in Textdatei schreiben
 
Ich würde mir die Datei in eine StringList laden und dann die einzelnen Zeilen durchgehen, bis du die Zeile gefunden hast.

Delphi-Quellcode:
procedure FindInFile(SrcFile : String; DestFile : String; TextToFind : String);
var
  sl_Src,
  sl_Dest : TStrings;
  idx : Word;
begin
  sl_Src:=TStringList.Create;
  sl_Dest:=TStringList.Create
  try
    sl_Src.LoadFromFile(SrcFile);
    //sl_Dest.LoadFromFile(DestFile) //Wenn an die alte Datei angehangen werden soll
    for idx:=0 to sl_Src.Count-1 do
    begin
      //Jetzt kommts drauf an, wie du suchen willst:
      if (AnsiContainsStr(sl_Src[idx],TextToFind)) then //case-sensitiv
      //if (AnsiContainsText(sl_Src[idx],TextToFind)) then //nicht case-sensitiv
        sl_Dest.Add(sl_Src[idx]);
    end;
  finally
    sl_Src.Free;
    sl_Dest.Free;
  end;
end;
Hier fehlt jetzt die Fehlerüberprüfung. Und außerdem ist das eine Resourcen/Rechenzeit-Verschwendung wenn du viele Sachen aus der Datei finden wills. Aber in etwa so, sollte es gehen.

RavenIV 16. Dez 2005 07:23

Re: Zeile aus Datei in Textdatei schreiben
 
ich würde die Datei Zeile für Zeile einlesen und dann schauen, ob die gelesene Zeile passt.
somit musst du nicht erst die ganze Datei einlesen.
Delphi-Quellcode:
   
var
  F: TextFile;
  S: string;
begin
    AssignFile(F, FileName);
    Reset(F);
    repeat
      Readln(F, S);                       { Erste Zeile der Datei lesen }
    until S = gesuchteZeile;
    CloseFile(F);
end;

Xenonz 16. Dez 2005 14:16

Re: Zeile aus Datei in Textdatei schreiben
 
Danke schon einmal für die Antworten!
Also im Moment sieht das ganze wie folgt aus:

Delphi-Quellcode:
var
  F,D: TextFile;
  S: string;
begin
    AssignFile(F, 'test.txt');
    Reset(F);
    repeat
      Readln(F, S);
    until S = 'haha';
    CloseFile(F);

    AssignFile(D, 'neu.txt');
    Reset(D);
    writeln(D, S);
    CloseFile(D);
end;
Dabei spuckt der Compiler jedoch einen Fehler aus: ElnOutError .

Ein weiteres Problem war, dass in dieser Zeile auch noch andere Zeichen vorkommen dürfen als nur 'haha'. Wie kann man also anstatt S = 'haha' überprüfen ob haha in s vorhanden ist?

Mfg Xenonz

RavenIV 16. Dez 2005 14:37

Re: Zeile aus Datei in Textdatei schreiben
 
Zitat:

Zitat von Xenonz

Ein weiteres Problem war, dass in dieser Zeile auch noch andere Zeichen vorkommen dürfen als nur 'haha'. Wie kann man also anstatt S = 'haha' überprüfen ob haha in s vorhanden ist?

Mfg Xenonz

mit pos (...)
schau mal in der Delphi-Hilfe nach.

Xenonz 16. Dez 2005 15:01

Re: Zeile aus Datei in Textdatei schreiben
 
Danke!
Also dieses Problem ist nun gelöst mit:
Delphi-Quellcode:
until (pos('haha',S) > 0);
Nun noch das schreiben in eine Datei. Wieso treten bei mir diese Fehler auf?

Xenonz 16. Dez 2005 15:08

Re: Zeile aus Datei in Textdatei schreiben
 
Soo!
Ich habe gerade bemerkt, dass Reset nicht zum schreiben öffnet!
So sieht nun das ganze fertig aus:

Delphi-Quellcode:
var
  F, D : TextFile;
  S: string;
begin
    AssignFile(F, 'test.txt');
    Reset(F);
    repeat
      Readln(F, S);
    until (pos('haha',S) > 0);
    CloseFile(F);

    AssignFile(D, 'neu.txt');
    append(D);
    writeln(D, S);
    CloseFile(D);
end;
Danke für die Hilfe!


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