Autor Beitrag
muetzenjoe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 56

Win XP / Win Vista
# Delphi 6 Enterprise; # HTML Editor Phase 5; # Ulead Gif Animator 5;
BeitragVerfasst: Mi 28.07.10 23:35 
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!

_________________
Sind wir nicht alle ein wenig Newbee???
Teekeks
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 211
Erhaltene Danke: 23



BeitragVerfasst: Mi 28.07.10 23:51 
Sagt dir "crosspost" etwas?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 28.07.10 23:54 
Naja, nicht sonderlich schnelle aber einfache Lösung:
ausblenden 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. ;-)


Zuletzt bearbeitet von jaenicke am Do 29.07.10 18:39, insgesamt 1-mal bearbeitet
Tastaro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 414
Erhaltene Danke: 23



BeitragVerfasst: Do 29.07.10 10:33 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Naja, nicht sonderlich schnelle aber einfache Lösung:
ausblenden 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
ausblenden Delphi-Quelltext
1:
i < length(MyText)					

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 56

Win XP / Win Vista
# Delphi 6 Enterprise; # HTML Editor Phase 5; # Ulead Gif Animator 5;
BeitragVerfasst: 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

_________________
Sind wir nicht alle ein wenig Newbee???
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Fr 30.07.10 11:26 
Hallo,

Buchstaben scheinen ja sehr interessant zu sein..
Eine Variante ohne delete.

ausblenden volle Höhe 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);
// entfernt alle doppelten Buchstaben und kuerzt den String

var
  i , j,k : integer;
begin
  writeln('vorher : ',s);
  IF length(s) < 2 then 
    exit;

  i := 1;
  j := 1;
  k := length(s);// Nur einmal abfragen
  
  while i < k do
    begin
    //Buchstaben innerhalb Zeichenkette kopieren
    s[j] := s[i];
    // Falls doppelt, dann dahinter weiter machen
    if s[i]=s[i+1then
      inc(i);
    inc(i);
    inc(j);
    end;
  writeln('nachher: ',s,'  ',i:3,j:3,k:3);
  
  // Falls letzter Buchstabe nicht doppelt, diesen kopieren
  IF i = k then
    begin
    s[j] := s[k];
    inc(j);// damit setlength anschliessend passt
    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';  // 4 'L'
  DoppelteKuerzen(Test);
  Test := 'HAALLLOO';   //  3 'L'
  DoppelteKuerzen(Test);
  readln
END.


Gruß Horst