![]() |
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 |
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. |
Re: Buchstaben in Text suchen & ersetzen
Hey
Eine Kopie erstellt man zum Beispiel so oder?
Delphi-Quellcode:
dem alten Text einfach einer neuen Variable zuweisen.
Text2 := mOriginal.Text;
Mit dem, wie man Zeichen für Zeichen ersetzt bin ich überfragt.
Delphi-Quellcode:
Pascall
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 |
Re: Buchstaben in Text suchen & ersetzen
Delphi-Quellcode:
Ein Computer macht das, was man ihm sagt, unter keinen Umständen etwas anderes. :mrgreen:
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; 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; |
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:
Stimmt das so wirklich? Dann wäre ich ja begeistert, außer dem einen Fehler...
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; Pascall Danke schon Mal |
Re: Buchstaben in Text suchen & ersetzen
Zitat:
Du prüfst L-mal nach, ob der L-te Buchstabe des Textes einen Wert hat. Das scheint mir nicht sehr sinnvoll ;) |
Re: Buchstaben in Text suchen & ersetzen
Hier passt was nicht:
Delphi-Quellcode:
mOriginal.text[L] ist ein Buchstabe, stringgrid1.Cells[0,0] jedoch ein string. Spätestens bei der Zuweisung geht das schief.
if mOriginal.text[L] = stringgrid1.Cells[0,0] then Text2[L] := stringgrid1.Cells[3,0];
Leider erwähnst du nicht, wie die Übersetzungstabelle genau aufgebaut ist. |
Re: Buchstaben in Text suchen & ersetzen
Hey
(Ist der Fehler immer noch drin mit Char + String, aber immerhin schon etwas verbessert)
Delphi-Quellcode:
Meine Tabelle ist wie folgt aufgebaut:
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; 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 |
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; |
Re: Buchstaben in Text suchen & ersetzen
Hey
Danke, jetzt klappt es, verstanden habe ich es aber noch nicht ganz.
Delphi-Quellcode:
Vielen Dank für die Lösung meines Problems, ich hoffe du kannst mir noch meine Fragen beantworten
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; Pascall |
Re: Buchstaben in Text suchen & ersetzen
Zitat:
Damit stellen wir sicher, dass Text[ i ] auch genau nur einen Buchstaben (also ein Char-Wert) zugewiesen wird. btw. du durchläufst nicht die Spalten sondern die Zeilen ;) |
Re: Buchstaben in Text suchen & ersetzen
Hey
Ist ja eigentlich ganz logisch, muss man nur darauf kommen.... Kurze Frage: Ist es sehr schwer zu programmieren, aus einer txt Datei etwas in ein StringGrid zu lesen? Danke nochmal Pascall |
Re: Buchstaben in Text suchen & ersetzen
Zitat:
Genau wie: "Ist es sehr schwer Menschen dazu zu bewegen zu mir nach Hause zu kommen?" Kann man eigentlich nur mit "Was weiß ich, eigentlich ja nicht, aber ... ich kenne die Menschen und Dein Zuhause nicht!" :mrgreen: |
Re: Buchstaben in Text suchen & ersetzen
Hey
Also es ginge darum, die Buchstaben und Häufigkeiten aus Spalte 3 + 4 aus einer Textdatei einlesen zu können, damit man zum Beispiel auch mit anderen Sprachen vergleichen kann. Man könnte es auch so einfach machen, dass die Textdatei schon fertig sortiert ist und man nur noch eins zu eins übernehmen kann. Falls es aber zu kompliziert ist und ich dabei nichts lerne, ist das auch okay. :thumb: Danke, klappt sonst alles ohne Probleme Pascall |
Re: Buchstaben in Text suchen & ersetzen
Zitat:
Du solltest dafür aber eine eigene Frage aufmachen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 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