Noch ein StringReplace

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
dater
Beiträge: 43
Registriert: 14.01.2006 15:22

Noch ein StringReplace

Beitrag 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 !
Zuletzt geändert von dater am 31.10.2007 10:50, insgesamt 1-mal geändert.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Bitte überarbeite nochmal deine Beschreibung, man versteht ja kaum was.
Und auch den Beispielcode in CODE-Tags setzen.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
dater
Beiträge: 43
Registriert: 14.01.2006 15:22

erstetzmenge ?

Beitrag von dater »

Hi,
meinst Du die Anzahl der Übereinstimmungen ?

Dater
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten