AGB  ·  Datenschutz  ·  Impressum  







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

Buchstaben in Text suchen & ersetzen

Ein Thema von Pascall · begonnen am 8. Nov 2009 · letzter Beitrag vom 8. Nov 2009
Antwort Antwort
Seite 1 von 2  1 2      
Pascall

Registriert seit: 8. Nov 2009
10 Beiträge
 
#1

Buchstaben in Text suchen & ersetzen

  Alt 8. Nov 2009, 11:48
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Buchstaben in Text suchen & ersetzen

  Alt 8. Nov 2009, 11:54
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Pascall

Registriert seit: 8. Nov 2009
10 Beiträge
 
#3

Re: Buchstaben in Text suchen & ersetzen

  Alt 8. Nov 2009, 11:57
Hey

Eine Kopie erstellt man zum Beispiel so oder? 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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: Buchstaben in Text suchen & ersetzen

  Alt 8. Nov 2009, 12:17
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.

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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Pascall

Registriert seit: 8. Nov 2009
10 Beiträge
 
#5

Re: Buchstaben in Text suchen & ersetzen

  Alt 8. Nov 2009, 12:24
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: Buchstaben in Text suchen & ersetzen

  Alt 8. Nov 2009, 12:26
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#7

Re: Buchstaben in Text suchen & ersetzen

  Alt 8. Nov 2009, 12:35
Hier passt was nicht:

  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.
Uwe Raabe
  Mit Zitat antworten Zitat
Pascall

Registriert seit: 8. Nov 2009
10 Beiträge
 
#8

Re: Buchstaben in Text suchen & ersetzen

  Alt 8. Nov 2009, 12:49
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

Re: Buchstaben in Text suchen & ersetzen

  Alt 8. Nov 2009, 12:58
ok, dann machen wir das ganze nochmal etwas dynamischer

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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Pascall

Registriert seit: 8. Nov 2009
10 Beiträge
 
#10

Re: Buchstaben in Text suchen & ersetzen

  Alt 8. Nov 2009, 13:39
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:14 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