Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Buchstaben in Text suchen & ersetzen (https://www.delphipraxis.net/143023-buchstaben-text-suchen-ersetzen.html)

Pascall 8. Nov 2009 10:48


Buchstaben in Text suchen & ersetzen
 
Hey

Ich bin ein Delphi Neuling und würde mich freuen wenn ihr mir helfen könntet.
Folgendes Problem versuche ich zu beheben.

Ich habe einen Text in einem Memo Feld. In diesem Memo Feld will ich jedes Wort durchgehen und alle Buchstaben ersetzen.
Folgendes soll passieren:

Text wird durchgegangen und der erste Buchstabe in einer Tabelle (Stringgrid) gesucht. Zu diesem Buchstaben gibt es in der Tabelle ein Gegenstück, durch was es ersetzt werden soll.


Erst habe ich es mit Ansireplace versucht, nur dabei ist das Problem, dass wenn der Text durchgegangen wird z.B. das erste mal A -> Z ersetzt wird, schließlich wird am Ende dann wieder Z -> G ersetzt und alles stimmt nicht mehr. Anfangen will ich mit: for i := 1 to L do begin (L ist die Länge des Textes)

Vielen Dank für eure Hilfe

Pascall

alzaimar 8. Nov 2009 10:54

Re: Buchstaben in Text suchen & ersetzen
 
Erstelle Dir eine Kopie des Textes.
Dann gehe das Original Zeichen für Zeichen durch und ersetze in der Kopie das Zeichen.

Zeige dann die Kopie in einem separaten Memofeld.

Pascall 8. Nov 2009 10:57

Re: Buchstaben in Text suchen & ersetzen
 
Hey

Eine Kopie erstellt man zum Beispiel so oder?
Delphi-Quellcode:
Text2 := mOriginal.Text;
dem alten Text einfach einer neuen Variable zuweisen.

Mit dem, wie man Zeichen für Zeichen ersetzt bin ich überfragt.

Delphi-Quellcode:
for i := 1 to L do begin // 1 bis Länge des Textes
if mOriginal.text[L] = stringgrid1.Cells[0,0] then Text2[L] := stringgrid1.Cells[3,0]; // SO wollte ich das ersetzen, hat aber leider nicht ganz geklappt
Pascall

Sir Rufo 8. Nov 2009 11:17

Re: Buchstaben in Text suchen & ersetzen
 
Delphi-Quellcode:
for i := 1 to L do // 1 bis Länge des Textes
  begin
    if mOriginal.text[ i ] = stringgrid1.Cells[0,0] then Text2[ i ] := stringgrid1.Cells[3,0];
  end;
// Das Ergebnis, steht jetzt in Text2 und soll wieder zurück in das Memofeld
mOriginal.text := Text2;
Ein Computer macht das, was man ihm sagt, unter keinen Umständen etwas anderes. :mrgreen:

axo, da du ja vielleicht mehr als nur den Wert aus der Zelle [0,0] überprüfen willst:
Delphi-Quellcode:
// Wir speichern ein Kopie
Text2 := mOriginal.Text;
for i := 1 to Length( Text2 ) do // 1 bis Länge des Textes
  for r := 0 to 25 do
    begin
      if mOriginal.Text[ i ] = StringGrid1.Cells[ 0 , r ] then Text2[ i ] := StringGrid1.Cells[ 3, r ];
    end;
// Das Ergebnis, steht jetzt in Text2 und soll wieder zurück in das Memofeld
mOriginal.Text := Text2;

Pascall 8. Nov 2009 11:24

Re: Buchstaben in Text suchen & ersetzen
 
Hey

Das heißt so wie ich es gemacht habe, war es richtig? Aber leider kommt dann immer der Fehler: Inkompatible Typen: 'Char' und 'string'

Das ganze sieht im Moment so aus:
Delphi-Quellcode:
begin
  mChiffriert.clear; // löschen, sicherheitshalber
  mDeChiffriert.clear;
  mOriginal.Text := uppercase(mOriginal.text);
  L := length(mOriginal.text);
  Text2 := mOriginal.Text;
  for i := 1 to L do begin
  if mOriginal.text[L] = stringgrid1.Cells[0,0] then Text2[L] := stringgrid1.Cells[3,0];
  mOriginal.text := Text2;
end;
Stimmt das so wirklich? Dann wäre ich ja begeistert, außer dem einen Fehler...

Pascall

Danke schon Mal

Sir Rufo 8. Nov 2009 11:26

Re: Buchstaben in Text suchen & ersetzen
 
Zitat:

Zitat von Pascall
Hey

Das heißt so wie ich es gemacht habe, war es richtig? Aber leider kommt dann immer der Fehler: Inkompatible Typen: 'Char' und 'string'

Das ganze sieht im Moment so aus:
Delphi-Quellcode:
begin
  mChiffriert.clear; // löschen, sicherheitshalber
  mDeChiffriert.clear;
  mOriginal.Text := uppercase(mOriginal.text);
  L := length(mOriginal.text);
  Text2 := mOriginal.Text;
  for i := 1 to L do begin
  if mOriginal.text[L] = stringgrid1.Cells[0,0] then Text2[L] := stringgrid1.Cells[3,0];
  mOriginal.text := Text2;
end;
Stimmt das so wirklich? Dann wäre ich ja begeistert, außer dem einen Fehler...

Pascall

Danke schon Mal

Nein, da ist noch ein sehr gravierender Fehler drin.
Du prüfst L-mal nach, ob der L-te Buchstabe des Textes einen Wert hat.
Das scheint mir nicht sehr sinnvoll ;)

Uwe Raabe 8. Nov 2009 11:35

Re: Buchstaben in Text suchen & ersetzen
 
Hier passt was nicht:

Delphi-Quellcode:
  if mOriginal.text[L] = stringgrid1.Cells[0,0] then Text2[L] := stringgrid1.Cells[3,0];
mOriginal.text[L] ist ein Buchstabe, stringgrid1.Cells[0,0] jedoch ein string. Spätestens bei der Zuweisung geht das schief.

Leider erwähnst du nicht, wie die Übersetzungstabelle genau aufgebaut ist.

Pascall 8. Nov 2009 11:49

Re: Buchstaben in Text suchen & ersetzen
 
Hey

(Ist der Fehler immer noch drin mit Char + String, aber immerhin schon etwas verbessert)

Delphi-Quellcode:
  Text2 := mOriginal.Text;
  for r := 0 to 25 do
    begin
      if mOriginal.Text[ i ] = StringGrid1.Cells[ 0 , r ] then Text2[ i ] := StringGrid1.Cells[ 3, r ];
    end;
  mOriginal.text := Text2;
Meine Tabelle ist wie folgt aufgebaut:
Spalte eins enthält die Buchstaben von A - Z
Spalte zweit enthält das Vorkommen in Prozent (Wie oft taucht Buchstabe A...Z in dem Memo Feld auf)
Spalte 3 enthält die Buchstaben von A-Z, jedoch geordnet nach Häufigkeit in der deutschen Sprache
(Spalte 4 schließlich die Häufigkeit in der D-Sprache in Prozent)

Spalte 1+2 ordnen sich automatisch nach der Häufigkeit, Häufigster Buchstabe im Text: Ganz oben

Jetzt will ich den Häufigsten Buchstaben im Text mit dem Häufigsten der Deutschen Sprache ersetzen, den zweit Häufigsten mit dem ... usw.

Pascall

PS: An dem Problem beiße ich mir schon seit Tagen die Zähne aus

Sir Rufo 8. Nov 2009 11:58

Re: Buchstaben in Text suchen & ersetzen
 
ok, dann machen wir das ganze nochmal etwas dynamischer :mrgreen:

try this:
Delphi-Quellcode:
Text2 := mOriginal.Text;
  for i := 1 to Length( Text2 ) do // alle Positionen des Textes durchlaufen
    for r := 0 to StringGrid1.RowCount - 1 do // mit allen Zeilen des StringGrids vergleichen
      if mOriginal.Text[ i ] = StringGrid1.Cells[ 0 , r ][ 1 ] then
        Text2[ i ] := StringGrid1.Cells[ 3, r ][ 1 ];
mOriginal.text := Text2;

Pascall 8. Nov 2009 12:39

Re: Buchstaben in Text suchen & ersetzen
 
Hey

Danke, jetzt klappt es, verstanden habe ich es aber noch nicht ganz.

Delphi-Quellcode:
Text2 := mOriginal.Text;
  for i := 1 to Length( Text2 ) do // alle Positionen des Textes durchlaufen [b]Ist logisch, man geht alle Zeichen des Text2 von 1 - letzten Buchstaben durch[/b]
    for r := 0 to StringGrid1.RowCount - 1 do // mit allen Zeilen des StringGrids vergleichen [b]r ist eine Variable, die wird 0 gesetzt und man geht alles durch von 0 (Erste Zeile vom Stringgrid?) bis RowCount -1 (Bis ganz unten, aber warum - 1?)[/b]
      if mOriginal.Text[ i ] = StringGrid1.Cells[ 0 , r ][ 1 ] then [b]Hier ist am Anfang i = 1, da erster Buchstabe und man geht die Spalten durch von oben nach unten, daher [0,r] (0 Spalte) aber was bedeutet die [1] ?[/b]
        Text2[ i ] := StringGrid1.Cells[ 3, r ][ 1 ]; [b]Hier wird der Buchstabe durch den neuen ersetzt und dann unten der neue durch den alten Text ersetzt[/b]
mOriginal.Text := Text2;
Vielen Dank für die Lösung meines Problems, ich hoffe du kannst mir noch meine Fragen beantworten

Pascall


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:03 Uhr.
Seite 1 von 2  1 2      

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