AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Text ersetzen

Ein Thema von axmarq · begonnen am 27. Jul 2007 · letzter Beitrag vom 27. Jul 2007
Antwort Antwort
axmarq

Registriert seit: 4. Jul 2007
8 Beiträge
 
#1

Text ersetzen

  Alt 27. Jul 2007, 08:40
Hallo,

ich möchte gerne bestimmten Text, den ich aus einem Textfile lade ersetzen und in einem neuen Textfile speichern.
Dafür habe ich zwei Memofelder, 4 Buttons und folgenden Code eingefügt:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.LoadFromFile('C:\Test.txt');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Memo2.text:=StringReplace(Memo1.text,'RFU','RFU_CON',[rfReplaceAll, rfIgnoreCase]);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Memo2.Lines.SavetoFile('C:\Test2.txt');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
close;
end;
Wie kann ich nun verhindern, dass nicht der komplette übereinstimmende Text ersetzt wird.
Ich möchte zum Beipiel, dass in einer Zeile nur das erste Wort geprüft wird und dort ersetzt. Wenn das Wort an dritter Stelle vorkommt, möchte ich kein Ersetzen durchführen.

Hat jemand einen Tipp?

Danke und Gruß,
axmarq
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Text ersetzen

  Alt 27. Jul 2007, 08:46
Hallo, anstatt das StringReplace auf den kompletten Text loszulassen, könntest Du das Memo zeilenweise durchgehen (for i := 0 to Memo.Lines.Count - 1), schauen, ob der gesuchte Text am Zeilenanfang steht (if Pos(Suchtext, Memo.Lines[i] = 1) und dann ggf. mit StringReplace(ohne rfReplaceAll) den Text ersetzen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#3

Re: Text ersetzen

  Alt 27. Jul 2007, 09:17
Hallo,
Zitat von axmarq:
ich möchte gerne bestimmten Text, den ich aus einem Textfile lade ersetzen und in einem neuen Textfile speichern.
Du benutzt die beiden Memos aber nur für Testzwecke und ersetzt die dann anschliessend durch eine Stringlist, oder?

Edit:
Zu Deiner eigentlichen Frage:

Basierend auf dem Vorschlag von DeddyH könntest Du Dir eine eigene StringReplace-Funktion schreiben, an welche Du dann noch die zu überprüfende Textposition übergibst.
  Mit Zitat antworten Zitat
axmarq

Registriert seit: 4. Jul 2007
8 Beiträge
 
#4

Re: Text ersetzen

  Alt 27. Jul 2007, 19:27
Hallo,

vielen Dank für Eure Antworten. Zunächst mal zu s-off: Wo liegt der Vorteil, wenn ich eine Stringlist nehme?

Zu DeddyH: Ich habe mal versucht Deine Idee umzusetzen. Bin aber leider gescheitert. Habe den Code jetzt mal so umgeändert.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
for i := 0 to Memo1.Lines.Count - 1 do begin
   if Pos('RFU', Memo1.Lines[i] = 1) then
   StringReplace(Memo1.text,'RFU','RFU_CON',[rfIgnoreCase]);
end;
Ich weiß nicht wie ich jetzt den StringReplace einbaue und wie ich die if-Schleife verwende

Könnt Ihr einem Anfänger nochmal mit Rat und Tat zur Seite stehen.

Danke und Gruß,
axmarq
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Text ersetzen

  Alt 27. Jul 2007, 19:35
Delphi-Quellcode:
for i := 0 to Memo1.Lines.Count - 1 do begin
  if Pos('RFU', Memo1.Lines[i] = 1) then
    Memo1.lines[i]:=StringReplace(Memo1.lines[i],'RFU','RFU_CON',[rfIgnoreCase]);
end;
So sollte es ungefähr funktionieren.
Weil, Du willst ja nur den Text in der Zeile ersetzen wo er denn auch aufgetaucht ist.

Und, if-Schleifen gibt es nicht.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

Re: Text ersetzen

  Alt 27. Jul 2007, 19:36
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
  Memo2.Clear;
  Memo2.Lines.BeginUpdate;
  for i := 0 to Memo1.Lines.Count - 1 do
    if Pos('rfu',AnsiLowerCase(Memo1.Lines[i])) = 1 then
      Memo2.Lines.Add(StringReplace(Memo1.Lines[i],'rfu','RFU_CON',[rfIgnoreCase]))
    else
      Memo2.Lines.Add(Memo1.Lines[i]);
  Memo2.Lines.EndUpdate;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#7

Re: Text ersetzen

  Alt 27. Jul 2007, 19:55
Der Vorteil ist der, dass Du alles, was Du jetzt mit Deinen beiden Memos anstellst, auch in einer Stringliste abhandeln kannst.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

Re: Text ersetzen

  Alt 27. Jul 2007, 20:00
Und wenn er das gar nicht will? Wenn ich das richtig verstanden habe, will er eine Datei laden, den Text ersetzen und dann unter anderem Namen abspeichern. Die Memos dienen da wohl als eine Art Preview.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
axmarq

Registriert seit: 4. Jul 2007
8 Beiträge
 
#9

Re: Text ersetzen

  Alt 27. Jul 2007, 20:33
Hallo Zusammen,

vielen Dank für die zahlreichen Antworten. Auch für den Hinweis mit der Stringlist. Vielleicht kann ich das ja irgendwann verwenden. In diesem Fall soll es tatsächlich als Vorschau dienen.

Ich habe den Code von DeddyH verwendet und es funzt prima. Perfekt!
Vielleicht kannst Du mir aber noch erklären wofür AnsiLowerCase steht. Ich wills schließlich auch verstehen.

Vielen Dank nochmal.
axmarq
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:52 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