Entwickler-Ecke
Sonstiges (Delphi) - Doppelte Buchstaben filtern
muetzenjoe - Mi 28.07.10 23:35
Titel: Doppelte Buchstaben filtern
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:
Zitat: |
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!
Teekeks - Mi 28.07.10 23:51
Sagt dir "crosspost" etwas?
jaenicke - Mi 28.07.10 23:54
Naja, nicht sonderlich schnelle aber einfache Lösung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| i := 1; while i < Length(MyText) do begin if MyText[i] = MyText[Succ(i)] then Delete(MyText, i, 1); Inc(i); end; |
Habs nicht getestet, aber sollte passen.
// EDIT: Du hast Recht, war wohl etwas spät gestern. ;-)
Tastaro - Do 29.07.10 10:33
jaenicke hat folgendes geschrieben : |
Naja, nicht sonderlich schnelle aber einfache Lösung: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| i := 1; while i < Pred(Length(MyText)) do begin if MyText[i] = MyText[Succ(i)] then Delete(MyText, i, 1); Inc(i); end; | Habs nicht getestet, aber sollte passen. |
Sieht gut aus, aber
sollte besser sein.
Nebenbei: Ist pred und succ cooler als - 1 und + 1? Ich persönlich finde es deutlich schwerer zu lesen.
Beste Grüße
muetzenjoe - Do 29.07.10 23:28
Danke erst einmal. Ich versuche es mal. Habe da noch nen anderen Tip bekommen. Ich werde das jetzt gleich mal alles testen und gebe dann Meldung was am besten funktioniert!
Big ThX
Horst_H - Fr 30.07.10 11:26
Hallo,
Buchstaben scheinen ja sehr interessant zu sein..
Eine Variante ohne delete.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58:
| program unbenannt;
{$IFDEF FPC} {$MODE DELPHI} {$ENDIF}
procedure DoppelteKuerzen(var s: string);
var i , j,k : integer; begin writeln('vorher : ',s); IF length(s) < 2 then exit;
i := 1; j := 1; k := length(s); while i < k do begin s[j] := s[i]; if s[i]=s[i+1] then inc(i); inc(i); inc(j); end; writeln('nachher: ',s,' ',i:3,j:3,k:3); IF i = k then begin s[j] := s[k]; inc(j); end; setlength(s,j-1); writeln('Ergibt: ',s); writeln; end;
var Test : string; BEGIN Test := 'HHAALLLLOO,, DDIIEESS IISSTT EEIINN TESTT'; DoppelteKuerzen(Test);
Test := 'HAALLLLOO DDIIEESS IISSTT EEIINN TEST'; DoppelteKuerzen(Test); Test := 'HAALLLLOO'; DoppelteKuerzen(Test); Test := 'HAALLLOO'; DoppelteKuerzen(Test); readln END. |
Gruß Horst
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!