Seite 1 von 1
ReplaceRegularExpression: Komma durch Punkt ersetzen
Verfasst: 20.07.2009 10:59
von Kiffi
[ächz] RegExp ist echt nicht mein Ding.
* Ich möchte alle Kommata in numerischen Werten durch Punkte ersetzen
Beispiel: 4,321 -> 4.321
Mein bisheriger Code...
Code: Alles auswählen
dummy.s = "lala 4,321 lulu, lölöl" ; das Komma hinter lulu soll nicht ersetzt werden
If CreateRegularExpression(0, "(\d),(\d)")
Debug ReplaceRegularExpression(0, dummy, "$1.$2")
FreeRegularExpression(0)
EndIf
... funktioniert leider nicht:
Debugger hat geschrieben:lala $1.$221 lulu, lölöl
Sollte $ nicht ein Platzhalter sein, wenn man es im Ersetzungsausdruck
angibt? In
gängigen RegExp-Testern funktioniert es hingegen. Tickt PCRE
hier anders als andere RegExp-Parser?
Danke im voraus & Grüße ... Kiffi
Verfasst: 20.07.2009 11:59
von edel
Code: Alles auswählen
ImportC ""
pcre_exec(*pcre, *extra, subject.s, length, startoffset, options, *ovector, ovecsize)
EndImport
Procedure.s KommaSollWeg(subject.s)
Protected string.s
Protected Dim ovec(99)
Protected len,offset
string = subject
len = Len(string)
regex = CreateRegularExpression(#PB_Any, "(\d+)(,)(\d+)")
While pcre_exec(PeekI(regex), 0, string, len, offset, 0, @ovec(), 99)>0
PokeC(@string + ovec(3),'.')
offset = ovec(1)
Wend
FreeRegularExpression(regex)
ProcedureReturn string
EndProcedure
subject.s = "lala 4,321 lulu, lölöl"
Debug KommaSollWeg(subject)
Verfasst: 20.07.2009 12:24
von Kiffi
@edel: Klasse! Funktioniert 1a
Schade nur, dass PB das nicht nativ kann.
Danke & Grüße ... Kiffi
Verfasst: 20.07.2009 19:57
von AND51
Ich bin öfter mal an weiteren PB-PCRE-Funktionen wie diese hier interessiert.
edel, kannst du (wenn du Zeit und Lust hast) vielleicht mal schreiben, wie ich alle Funktionen einbinden kann, welche es gibt und vielleicht grob, was die machen?
Toll fand ich ja schon immer die getSubString-Funktion. Aber ich wüsste nicht, wie ich die wo her importieren sollte.
Verfasst: 20.07.2009 21:57
von edel
die lib wird doch eh mit eingebunden und die funktionen und parameter bekommste aus der hilfe von pcre.
Verfasst: 20.07.2009 22:45
von marco2007
Das von Edel ist mir zu heavy.
Das hier wäre wohl nativ:
Code: Alles auswählen
dummy.s = "lala 4,321 lulu, lölöl, 2,1, 2,34"
For i=0 To 9
For j=0 To 9
If CreateRegularExpression(0, "["+Str(i)+"],["+Str(j)+"]")
dummy=ReplaceRegularExpression(0, dummy, Str(i)+"."+Str(j))
FreeRegularExpression(0)
EndIf
Next
Next
Debug dummy
Verfasst: 20.07.2009 23:36
von Little John
marco2007 hat geschrieben:Das von Edel ist mir zu heavy.
Das hier wäre wohl nativ:
Code: Alles auswählen
dummy.s = "lala 4,321 lulu, lölöl, 2,1, 2,34"
For i=0 To 9
For j=0 To 9
If CreateRegularExpression(0, "["+Str(i)+"],["+Str(j)+"]")
dummy=ReplaceRegularExpression(0, dummy, Str(i)+"."+Str(j))
FreeRegularExpression(0)
EndIf
Next
Next
Debug dummy
Dann würde ich es lieber ganz ohne Regular Expressions machen.

=> Nach Komma suchen.
=> Wenn gefunden und beide Zeichen links und rechts davon Ziffern sind, dann durch Punkt ersetzen.
=> Nach nächstem Komma suchen.
Gruß, Little John
Verfasst: 20.07.2009 23:49
von marco2007
Little John hat geschrieben:Dann würde ich es lieber ganz ohne Regular Expressions machen.

In diesem Fall sicher am Besten. Ich mag RegExp schon alleine wegen der Lizenz nicht. Ich wollte nur schauen, ob`s einen anderen Weg mit RegExp gibt. Ich verwende RegExp gar nicht, obwohl`s sicher `ne gute Sache wär/ist.
Zwei Posts mit RegExp = alles, was ich bisher mit RegExp gemacht habe.