Delphi Doppelte Buchstaben filtern

ScarFace01

19.02.2011 - 22.19
ID: 83851
L
7 April 2007
336
42
Ich habe Probleme mit einem alten Programm von mir und bin nun dabei mir eine Erweiterung dafür zu basteln.

Das alte Tool ist sehr umfangreich und ich habe den Src dazu leider nicht mehr, kann also den Fehler dadrin nicht mehr beheben!

Egal!

Es geht auf jeden Fall dadrum, dass ich einen Text erhalte der decodiert bzw. generiert wird aber nen Fehler hat und mit so ziemlich alle Buchstaben/Ziffern doppelt ausgiebt. Dafür nun die Erweiterung die den Text filtern soll.

Hier mal ein Beispiel Text den ich erhalte:
Code:
HHaalllloo,,  iicchh  bbiinn  eeiinn  BBeeiissppiieell  TTeexxtt!!
Gibt es eine relativ einfach Möglichkeit diesen text nun zu zu filtern, dass er wieder ein normaler Text wird?

Ich könnte ja einfach in einer Schleife anhand von pos() und stringreplace() nach den doppelten Buchstaben suchen und sie ersetzten aber was mache ich mit den doppelten, die doppelt bleiben sollen? wie in HHaalllloo(Hallo)? Gibt es eine Befehl in der Art wie strip() oder so der dafür funktionieren würde? Ich denke mal nicht. Aber ich hoffe, dass mich hier jemand auf ne Idee bringen kann und/oder sogar nen Beispiel oder Schnipsel Code für mich hat!

Danke im Vorraus!
 
Zuletzt bearbeitet von einem Moderator:
Schmeiss doch einfach immer jeden zweiten Buchstaben raus:
PHP:
$result = '';
for ($i=0, $l=strlen($string); $i<$l; $i++)
{
  if ($i%2)
    continue;
  $result .= $string[$i];
}

[edit]

Sorry, ich hab jetzt grad erst das Delphi gelesen. :oops: Aber ich denke, es sollte analog auch in Delphi funktionieren, leider kenne ich mich da mit den nötigen Funktionen nicht aus...
 
Zuletzt bearbeitet:
Statt Modulo und continue kann man im Schleifenrumpf gleich
PHP:
i += 2
machen, dann wirds n Einzeiler. Geht in Delphi sicher analog.
 
Ich seh grad: Im Beispieltext sind die Leerzeichen nur einfach. Also zusätzlich noch n if in die Schleife und in diesem Fall den Zähler wieder um 1 dekrementieren, um das auszubügeln.
 
Ich glaub, das ist nur durch die Darstellung so. Im Quelltext sind die Leerzeichen auch doppelt...
 
Stimmt. Hab in Post #1 aus dem Quote- mal ein Code-Tag gemacht, damit das auch jeder sieht, der es nicht grade ausprobiert.
 
Erst einmal Danke für die Tips! Und doch, es werden auch die Freizeichen doppelt ausgegeben!

Ich bastel die Idee mal um und schaue ob es so funktioniert. Ist ja nun wirklich nicht viel Code!
 
Was mir eben noch eingefallen is: Wenn du auf der Konsole arbeitest und dort diese "kaputte" Ausgabe reparieren musst, kannst du sed verwenden:
Code:
[FONT=Lucida Console]sed 's/\(.\)\1/\1/g'[/FONT]
 
Problrmatisch wird es dann aber bei:

trennen oder wissen oder wollen, oder ....

wie wird man diese wörter denn als Wörter erkennen, die nicht dazu gehören, obwohl doppelte Buchstaben darin enthalten sind ?

nur ne Anmerkung

@theHacker: gut, due kennst dich mit sed aus !
 
@ScarFace01:

Du solltest wohl ein Wörterbuch haben.
Jedes Wort was drin steht, hilft dir beim vergleichen und zu säubern !
Wie Du es dann machst is dir überlassen !
 
Wieso sollte das problematisch sein?
Wenn bei ihm aus "trennen" dann "ttrreennnneenn" wird, kann man das ganz normal wie tH gesagt hat einfach in der Schleife i += 2 machen.

Was denn wenn es HHHalloooo ist ?

jedes wert sollte folgender Maßen überprüft werden:

ich schreibe bildliche befehle, die in php anders heißen !
PHP:
$word = "HHHalloooo";
$safe = array("");
#schleife
while (strlen($word)!=0) {
  $chk = erstenbuchstabe_abtrennen 
  if ( $chk !in_safe_enthalten ) {
     insert_in_array( $chk, $safe );
  }

dann hat man jeden Buchstaben nur einmal drin !
würde also Halo machen !
Könnte eventuell sinn machen, ein wörterbuch vergleich nach jedem buchstaben zu haben und alle passenden Wörter in ein Array packen ab der Länge 2. (wegen wörtern wie ddaa => da oder andere)

In meinem Bsp. gibt es einen Best Case, man schaut, ob das wort X enthalten ist, was den selben Anfangsbuchstaben hat wie das Original.
Also is Hallo in HHHalloooo enthalten ?
uh leider
 
Zuletzt bearbeitet:
Könnte eventuell sinn machen, ein wörterbuch vergleich nach jedem buchstaben zu haben und alle passenden Wörter in ein Array packen ab der Länge 2. (wegen wörtern wie ddaa => da oder andere)
Du kannst auch alle Wörter im Wörterbuch auf ihr "kein Folgebuchstabe ist gleich"-Bild abbilden, quasi eine Normalisierung durchführen, und dann dem Benutzer eine Auswahl zeigen, wo er nach dem Sinn wählen muss. Hierzu muss das komplette Wörterbuch normalisiert werden.

Code:
GGGGeeessttteeeerrnn gginngeen wwiirrrr zzuusaammmmmen aauff eeinnneer AAllllllllleeee...
Normalisiert:
Code:
Gestern gingen wir zusamen auf einer Ale.
Mögliche Wörter:
Code:
Gestern
gingen
wir, wirr
zusamen (*g*), zusammen
auf
einer
Alle, Allee
Is aber nicht die Aufgabenstellung und hier also viel zu kompliziert.