AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

StringReplace und doppelte Zeichen

Ein Thema von Opa · begonnen am 23. Dez 2007 · letzter Beitrag vom 4. Mai 2009
Antwort Antwort
Seite 1 von 5  1 23     Letzte » 
Benutzerbild von Opa
Opa

Registriert seit: 12. Jun 2003
107 Beiträge
 
Delphi 7 Enterprise
 
#1

StringReplace und doppelte Zeichen

  Alt 23. Dez 2007, 20:33
Nach dem ich erkennen musste das <StringReplace> nicht immer richtig funktioniert
StringReplace(S,#32#32,#32) kommt es zu Fehlern.
Hier mal eine Lösung: (Uppercase habe ich weggelassen, ich brauche das nicht für mein PRG)
Code:
function KillDoppelZeichenToZeichen(S:string;C:Char):string;
var
  I : integer;
begin
  if Length(S) < 2 then
  begin
    Result := S;//Zufrieden
   exit;
  end;
  Result := '';
  I := Length(S);
  repeat
    if (S[I] = C) and (I > 1) then
    begin
        while (S[I-1] = C) and (I > 1) do
        begin
          dec(I);
          if I < 2 then break; //Vertippt nicht 1 sonder I
        end;
     end;
    Result := S[I]+Result;
   dec(I);
  until I < 1;
end;
MFG
Wenn man nicht weiß was man sucht, findet man auch mit Google nichts.
Bevor ich hier eine Frage stelle, wurde Google vorher befragt. Hinweise dieser Art kann man sich schenken. Im übrigen muss mir niemand antworten.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.373 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: StringReplace und doppelte Zeichen

  Alt 23. Dez 2007, 20:48
Wie nicht richtig funktioniert?
was für Fehler?

und wie sollte deine Funktion da helfen, bzw. wie soll man die nutzen?


ja und wozu ist der leere Try-Except-Block?

if Length(S) < 2 then exit; : was pasiert wenn S nur 1 Zeichen lang ist?

[add]
was is'n dat für'n komischer Denglisch-Funktionsname?

[add2]
if 1 < 2 then break; : 1 ist immer kleiner als 2 (aber das sollte dir Delphi auch schon gesagt haben)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Opa
Opa

Registriert seit: 12. Jun 2003
107 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: StringReplace und doppelte Zeichen

  Alt 23. Dez 2007, 21:10
1: Der Name es viel mir nichts besseres ein. (Ist doch egal)
2: Der Try Except der kann weg (gestört hatte der aber nicht)
3 Wie die Helfen kann dann gib mal ein:
caption :=
_KillDoppelZeichenToZeichen(‚xxDasxlebenxxso schönxxxxseinxwennxesxnichtxxxxwelchexgebenxwürdex xxdiexxherummekelnxxmüssen.’,’x’);
Das Ding geht und fertig. Kannst den Mod sagen: Das Du es löschen möchtes und gut ist!

X = <Leer-Zeichen>
MFG
Wenn man nicht weiß was man sucht, findet man auch mit Google nichts.
Bevor ich hier eine Frage stelle, wurde Google vorher befragt. Hinweise dieser Art kann man sich schenken. Im übrigen muss mir niemand antworten.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.987 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: StringReplace und doppelte Zeichen

  Alt 23. Dez 2007, 21:28
Hallo,

was funktioniert denn bei StringReplace nicht? Bei mir geht alles einwandfrei, zumindest konnte ich kein Fehlverhalten feststellen.

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Opa
Opa

Registriert seit: 12. Jun 2003
107 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: StringReplace und doppelte Zeichen

  Alt 23. Dez 2007, 22:43
Ja wirklich? Dann versuch das mal mit (xxDasxxxxxLebenx ist schön)
Code:
var
  Flags  : TReplaceFlags;
  OK : boolean;
  S : string;
begin
  S:='xxDasxxxxxLebenx ist schön';{x = ggf. Leer-Zeichen}
  Flags := [rfReplaceAll, rfIgnoreCase];
//  S := StringReplace(S,'xx','x',Flags); // Erg = xDasxxxLebenx ist schön
    S:= KillDoppelZeichenToZeichen(S,'x'); //Erg = xDasxLebenx ist schön (so will ich das haben)
  Caption := S;
Mfg
Wenn man nicht weiß was man sucht, findet man auch mit Google nichts.
Bevor ich hier eine Frage stelle, wurde Google vorher befragt. Hinweise dieser Art kann man sich schenken. Im übrigen muss mir niemand antworten.
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#6

Re: StringReplace und doppelte Zeichen

  Alt 23. Dez 2007, 23:16
und wo liegt das problem???

Delphi-Quellcode:
var
  Flags : TReplaceFlags;
  OK : boolean;
  S : string;
begin
  S:='xxDasxxxxxLebenx ist schön';{x = ggf. Leer-Zeichen}
  Flags := [rfReplaceAll, rfIgnoreCase];
  S := StringReplace(S,'xx','x',Flags); // Erg = xDasxxxLebenx ist schön
// xDasxxxLebenx ist sch÷n
   writeln(s);
   readln;
end.
das macht delphi doch optimal und genau richtig . je zwei xx werden mit einem x ersetzt... also beispiel

xxDas --> xDas

und das kommt doch genau raus, oder brauch ich eine brille?

übrigens xxxxx = 5 x = 2x ersatz plus 1x übrig also xxx
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.373 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: StringReplace und doppelte Zeichen

  Alt 23. Dez 2007, 23:22
Dann hast du String Replace nicht verstanden, denn das ist genauso wie StringReplace geplant ist, also völlig richtig.

Recursionen gibt es nicht.

Delphi-Quellcode:
S := 'xxxxxxxxxx';
// 1122334455

S := StringReplace(S, 'xx', 'x', [rfReplaceAll]);

// S = 'xxxxx'
// 12345
weil rate mal was hier sonst passieren würde
Delphi-Quellcode:
S := 'xxx';
S := StringReplace(S, 'x', 'xx', [rfReplaceAll]);
das ergäbe bei Rekursion nicht 'xxxxxx' sondern einen unendlichlangen String aus x (also OutOfMemory oder wen unendlich Speicher vorhanden, dann würde dies Funkion nie ferig werden)


PS:
DoppelzeichenZuZeichen
EntferneDoppelZeichen
EntferneMehrfachZeichen
KillDupeChars
...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#8

Re: StringReplace und doppelte Zeichen

  Alt 23. Dez 2007, 23:24
Ich glaube, Opa sucht eine Funktion, die der Regex r/x{2,}/x/g folgt...
  Mit Zitat antworten Zitat
Benutzerbild von Opa
Opa

Registriert seit: 12. Jun 2003
107 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: StringReplace und doppelte Zeichen

  Alt 23. Dez 2007, 23:49
Ich suche nicht ich schreibe es mir selber.

Was StringReplace macht ist mir (Jetzt) klar und auch wie er es macht.
Was ich brauchte, war eine >Einfache Funktion< Die alle doppelten Zeichen (die fortlaufend sind) löscht bis auf eines.

Das Problem war, dass ich in Dateinamen doppelte Leerzeichen (evtl. x Leerzeichen, fortlaufen) hatte. Ein Leerzeichen wollte ich aber erhalten. Und nachdem ich mir StringReplace angeschaut hatte, stellte ich fest dass, dieses nicht geht. Also hatte ich mir eine eigenen Funktion geschrieben. Und weil bald Weihnachten ist, dachte ich das auch andere diese Funktion gebrauchen können. Ich mach das nie wieder! Ich merke schon das dieses nicht erwünscht ist. Bin halt ein alter Mann und denke wirres Zeug.

Sollte es in Delphi eine Funktion sein (die ich nicht kenne) die viele Zeichen durch aber mindestens 1 ersetzt/behält. Bitte mitteilen.

MFG
Wenn man nicht weiß was man sucht, findet man auch mit Google nichts.
Bevor ich hier eine Frage stelle, wurde Google vorher befragt. Hinweise dieser Art kann man sich schenken. Im übrigen muss mir niemand antworten.
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#10

Re: StringReplace und doppelte Zeichen

  Alt 24. Dez 2007, 00:42
tja, aber für 'ne einfache funktion recht komplex geworden...

guck dir mal den folgenden code an ... etwas kompakter, macht das selbe, denke ist besser für weiterentwicklungen...

grüsse und noch schöne weihnachten

Delphi-Quellcode:
function ReplaceDChar(Quelle: string; aChar: char): string;
var
 i: integer;
begin
 result := '';
 for i := 1 to length(quelle) do
  if (length(result)=0) or (quelle[i]<>result[length(result)]) or (aChar<>result[length(result)]) then
   result := result + quelle[i];
end;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 23:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf