ReplaceRegularExpression: Komma durch Punkt ersetzen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

ReplaceRegularExpression: Komma durch Punkt ersetzen

Beitrag 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
a²+b²=mc²
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@edel: Klasse! Funktioniert 1a :allright:

Schade nur, dass PB das nicht nativ kann. :|

Danke & Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

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

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

die lib wird doch eh mit eingebunden und die funktionen und parameter bekommste aus der hilfe von pcre.
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

Das von Edel ist mir zu heavy.

Das hier wäre wohl nativ: :D

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
Windows 11 - PB 6.03 x64
_________________________________
Little John

Beitrag von Little John »

marco2007 hat geschrieben:Das von Edel ist mir zu heavy.

Das hier wäre wohl nativ: :D

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
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag 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.
Windows 11 - PB 6.03 x64
_________________________________
Antworten