Seite 1 von 1

Noch ein StringReplace

Verfasst: 30.10.2007 10:49
von dater
Hallo,
ein Code-Beispiel für ein StringReplace. Die Procedure durchsucht
den String nach der Angebenen Zeichenkette (suchstring$), wird der
gesuchte String gefunden (groß-klein Schreibung wird nicht beachtet) ,
ersetzt die Procedure die übereinstimmenden Zeichen durch den in ersetz$
angegebenen Zeichen. Wenn im String mehrere Übereinstimmungen
gefunden werden, so können alle durch den ersetzt$ ersetzt werden.
Ich verwenden die Procedure für HTML Codierung!

Durch den Parameter "er" kann die Anzahl der "Ersetzungen" bestimmt werden. Wird 1 angegeben, wird nur die erste Übereinstimmung ersetzt,
bei 0 werden alle Übereinstimmungen ersetzt.

Parameter "ab_gefunden" ersetzt erst ab dem x gefundene
Übereinstimmung den String.

Wen der Parameter "returnfalse" auf 1 steht und es wird keine
Übereinstimmung gefunden wird im Rückgabestring "FALSE"
zurückgegeben.

Code: Alles auswählen

Procedure.s StringReplace(text$,suchstring$,ersetz$,er=99999,ab_gefunden=0,returnfalse=0)
If er=0 :er=99999:EndIf : tr=0
Protected startx=1
Repeat
Protected l=Len(text$)
Protected ls=Len(suchstring$)
Protected ler=Len(ersetz$) 
Protected textk$=LCase(text$) 
Protected suchk$=LCase(suchstring$)
	
x=FindString(textk$,suchk$,startx)
	If x>0
		If ab_gefunden=0
			left$=Left(text$,x-1)
			right$=Right(text$,l-x-ls+1)
			text$=left$+ersetz$+right$
			tr+1
		Else
			ab_gefunden-1
			startx=x+ls
		EndIf
	EndIf
	If tr=er :Break: EndIf
Until x=0
If tr=0 And returnfalse=1
	ProcedureReturn "FALSE"
Else
	ProcedureReturn text$
EndIf
EndProcedure

a$="Purebasic ist toll"
A$=StringReplace(a$,"toll","super")
debug a$

; Debug --> Purebasic ist super

Ich hoffe, es ist besser so !

Verfasst: 30.10.2007 15:59
von AND51
Bitte überarbeite nochmal deine Beschreibung, man versteht ja kaum was.
Und auch den Beispielcode in CODE-Tags setzen.

Verfasst: 30.10.2007 16:07
von Kiffi
... ebenso bitte alle nur in der Prozedur StringReplace() vorkommenden
Variablen auf Protected setzen.

... und bei dieser Gelegenheit kannst Du ja auch gleich mal ein
StringReplace() auf erstetzmenge machen. ;-)

Grüße ... Kiffi

erstetzmenge ?

Verfasst: 31.10.2007 14:01
von dater
Hi,
meinst Du die Anzahl der Übereinstimmungen ?

Dater

Verfasst: 31.10.2007 14:27
von AND51
Ah, dater, das klingt schon besser ^^
Tipp:

Code: Alles auswählen

Procedure ruckgabe(false.s="FALSE")
     ProcedureReturn false
EndProcedure

Debug rueckgabe()
Benutze für deinen False-Rückgabeparameter Strings! Auch diese Kannst du mit Standardwerten vorbelegen, sodass der benutzer sich sogar selber aussuchen kann, was er anstelle von False zurückgesendet haben möchte.