Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi In Textdatei suchen und Zeile einfügen (https://www.delphipraxis.net/61240-textdatei-suchen-und-zeile-einfuegen.html)

Spurius 18. Jan 2006 16:51


In Textdatei suchen und Zeile einfügen
 
Hallo,
wie kann ich in einer Textdatei ein Wort suchen und dann danach eine neue Zeile einfügen?
Gruß
Martin

RWarnecke 18. Jan 2006 16:56

Re: In Textdatei suchen und Zeile einfügen
 
Du kannst so an einer bestimmten Position Text in ein Memo einfügen :

Delphi-Quellcode:
    Insert(SelectedText, MemoText, Select + 1);
Das ist nur ein Beispiel. SelectedText, MemoText und Select sind nur Variablen.

Spurius 18. Jan 2006 17:05

Re: In Textdatei suchen und Zeile einfügen
 
Hallo,
mit pos müsste ich doch Worte in einer Textdatei finden oder? Ich verstehe nur nicht genau, was mir pos eigentlich zurückgibt, ausser das es vom Typ Interger ist.
Und wenn das klappt, Zeilenumburch reinschreiben und man hat die neue Zeile oder?

RWarnecke 18. Jan 2006 17:17

Re: In Textdatei suchen und Zeile einfügen
 
Die Position anhand einer Zahl. Diese Zahl musst Du für die Variable Select einsetzen.

Spurius 18. Jan 2006 18:04

Re: In Textdatei suchen und Zeile einfügen
 
Hallo,
habe jetzt versucht das so zu lösen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i,j: Integer;
 s:String;
 bla:textfile;
begin
 memo1.loadfromfile(fileb.filename);
 i := memo1.lines.count;
 AssignFile(bla,fileb.filename);
 Reset(bla);
 for i := 0 to i - 1 do begin
 readln(bla,s);
 if (pos('Z',s)>0) then begin
  write(bla,#10);
  writeln(bla, 'M0');
  end;
 end;
end;;
Leider wird in der Datei nichts sichtbar verändert :?:

RWarnecke 18. Jan 2006 18:28

Re: In Textdatei suchen und Zeile einfügen
 
Mit dieser Funktion suchst Du Dein Wort :

Delphi-Quellcode:
function PosN(Substring, Mainstring: string; n: Integer): Integer;    // Funktion zum Suchen ob ein Zeichen im String enthalten ist
begin                                                                          //
  if Pos(substring, mainstring) = 0 then begin                                 //
    posn := 0;                                                                 //
    Exit;                                                                      //
  end else begin                                                               //
    if n = 1 then posn := Pos(substring, mainstring)                          //
    else begin                                                                 //
      posn := Pos(substring, mainstring) + posn(substring, Copy(mainstring,    //
         (Pos(substring, mainstring) + 1), Length(mainstring)), n - 1);        //
    end;                                                                       //
  end;                                                                         //
end;                                                                           //
Diese Funktion gibt Dir die Position zurück. Diese Funktion habe ich von der Seite SwissDelphiCenter.

Nun kannste das folgendermaßen machen :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MemoText : String;
  Selected : Integer;
  Text : String;
begin
  MemoText := Memo1.Text;
  Selected := posn(Edit1.Text, MemoText, 1);
  Text := 'Das ist ein Test';
  Insert(Text, MemoText, Selected + 1);
  Memo1.Text := MemoText;
end;
Du brauchst dazu einen Button, ein Edit-Feld und ein Memo-Feld. Dann sollte beim anklicken das Wort aus dem Edit-Feld gesucht werden und an dieser Position der Text aus der Variable 'Text' eingefügt werden.
So müsste es klappen. Habe es nicht ausprobiert.

Spurius 18. Jan 2006 18:33

Re: In Textdatei suchen und Zeile einfügen
 
Hallo,
und wie sieht es mit meinem Code aus? Der müsste doch eigentlich auch funktionieren...

RWarnecke 18. Jan 2006 18:37

Re: In Textdatei suchen und Zeile einfügen
 
Zitat:

Zitat von Spurius
Hallo,
habe jetzt versucht das so zu lösen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i,j: Integer;
 s:String;
 bla:textfile;
begin
 memo1.loadfromfile(fileb.filename);
 i := memo1.lines.count;
 AssignFile(bla,fileb.filename);
 Reset(bla);
 for i := 0 to i - 1 do begin
 readln(bla,s);
 if (pos('Z',s)>0) then begin
  write(bla,#10);
  writeln(bla, 'M0');
  end;
 end;
end;;
Leider wird in der Datei nichts sichtbar verändert :?:

die Zeile

for i := 0 to i - 1 do begin muss for j := 0 to i - 1 do begin

Spurius 18. Jan 2006 18:49

Re: In Textdatei suchen und Zeile einfügen
 
Hi,
habs jetzt folgendermaßen gelöst:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i,j: Integer;
 s:String;
 bla:textfile;
 list1:TStringlist;
begin
 list1 := TStringlist.Create;
 list1.LoadFromFile(fileb.FileName);
 i := list1.Count;
 AssignFile(bla,fileb.filename);
 Reset(bla);
 for i := 0 to i - 1 do begin
 readln(bla,s);
 memo1.Lines.Add(s);
 if (pos('z',s)>0) then begin
  memo1.Lines.Add('M0');
  end;
 end;
 memo1.Lines.SaveToFile(fileb.FileName +'-conv.txt');
end;
Trotzdem danke für die Hilfe
Gruß
Martin

marabu 18. Jan 2006 18:59

Re: In Textdatei suchen und Zeile einfügen
 
Hallo Martin,

wolltest du nicht nach dem gefundenen Wort einen Zeilenumbruch einfügen? Wenn du den Text mit Memo.LoadFromFile() einliest und in Edit.Text das Literal einträgst, hinter dem umgebrochen werden soll, dann funktioniert das hier ganz gut:

Delphi-Quellcode:
Memo.Text := StringReplace(Memo.Text, Edit.Text, Edit.Text + sLineBreak, [rfReplaceAll]);
Dein eigener Code braucht keinen Zeilenindex, wenn du nach dem Laden der Datei in das Memo eh wieder mit der Textdatei arbeiten willst. ReadLn wird besser durch Eof terminiert und Write verschiebt den Positionszeiger für den nächsten Eingabe- bzw. Ausgabe-Befehl. Da musst du schon eine getrennte Ausgabedatei verwenden.

Grüße vom marabu


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