Delphi-PRAXiS

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

Sir Rufo 8. Nov 2009 12:49

Re: Buchstaben in Text suchen & ersetzen
 
Zitat:

Zitat von Pascall
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] ?

Das Gleiche was auch Text[ i ] bedeutet, nur das bei [ 1 ] immer nur der 1. Buchstabe genommen wird.
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 ;)

Pascall 8. Nov 2009 12:51

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

Sir Rufo 8. Nov 2009 13:00

Re: Buchstaben in Text suchen & ersetzen
 
Zitat:

Zitat von Pascall
Kurze Frage: Ist es sehr schwer zu programmieren, aus einer txt Datei etwas in ein StringGrid zu lesen?

Die Frage ist zu allgemein gestellt.

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:

Pascall 8. Nov 2009 13:06

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

Uwe Raabe 8. Nov 2009 14:06

Re: Buchstaben in Text suchen & ersetzen
 
Zitat:

Zitat von Pascall
Falls es aber zu kompliziert ist und ich dabei nichts lerne, ist das auch okay.

Nichts ist zu kompliziert (allenfalls zu aufwändig) und lernen kann man immer was.

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