Wie kann ich am schnellsten alle nicht Ziffern aus einem String entfernen?
Jede NichtZiffer mit ReplaceString() zu entfernen dauert einfach zu lang...
Evtl. hat ja jemand hier sowas schon gemacht.
MFG KeyKon
Alle nicht Ziffern entfernen...
- KeyKon
- Beiträge: 1412
- Registriert: 10.09.2004 20:51
- Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit) - Wohnort: Ansbach
- Kontaktdaten:
Alle nicht Ziffern entfernen...
(\/) (°,,,°) (\/)
- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
So in der Art:
Code: Alles auswählen
Procedure.s RemoveNonDigits(String.s)
Protected *C.CHARACTER = @String, Result.s
While *C\c
If *C\c >= '0' And *C\c <= '9'
Result + Chr(*C\c)
EndIf
*C + SizeOf(CHARACTER)
Wend
ProcedureReturn Result
EndProcedure
Debug RemoveNonDigits("td ztg1jfdiou2h iuiu3 j /)(/ 45 hljh6h 7l8 lkj j90")
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
Genau für Fälle wie diesen bieten sich Reguläre Ausdrücke geradezu an.
Um zu zeigen wie es geht:\D steht für "Nicht-Ziffern", diese werden entfernt. Übrig bleiben also nur Zahlen.
\D steht für alle Nicht-Ziffern, \d umgekehrt für alle Ziffern.
Um zu zeigen wie es geht:
Code: Alles auswählen
Procedure.s RemoveNonDigits(String.s)
Protected exp=CreateRegularExpression(#PB_Any, "\D")
String=ReplaceRegularExpression(exp, String, "")
FreeRegularExpression(exp)
ProcedureReturn String
EndProcedure
Debug RemoveNonDigits("td ztg1jfdiou2h iuiu3 j /)(/ 45 hljh6h 7l8 lkj j90")
\D steht für alle Nicht-Ziffern, \d umgekehrt für alle Ziffern.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Ich finde Tipps zu regulären Ausdrücken immer nett, will dies ja auch irgend-
wann mal verstehen, aber anbieten tun sie sich aber nicht unbedingt:
1. langsamer
2. bläht Exe auf
es sei denn man benötigt das noch wesentlich öfter im Programm
wann mal verstehen, aber anbieten tun sie sich aber nicht unbedingt:
1. langsamer
2. bläht Exe auf
es sei denn man benötigt das noch wesentlich öfter im Programm

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Ja, da gebe ich dir Recht.
Ich habe gerade extra gestestet:
Bei 10.000 Durchläufen
..................89 KB (RegExp)
..5 KB (Pointer)
Es wurde bereits vielfach diskutiert, dass ein Größenzuwachs von einigen KB nicht der Rede wert ist. ich beziehe mich hierbei auf zahlreiche Außerungen wie "im Zeitalter großer Festplatten", "riesiger Arbeitsspeicher" und "schneller DSL-Anschlüsse", die zu Hauf in Diskussionen zum Thema Dateigrößen in diesem Forum zu finden sind.
Ich habe gerade extra gestestet:
Bei 10.000 Durchläufen
- RegExp ca 3500 ms
Pointer 530 ms
..................89 KB (RegExp)
..5 KB (Pointer)
Es wurde bereits vielfach diskutiert, dass ein Größenzuwachs von einigen KB nicht der Rede wert ist. ich beziehe mich hierbei auf zahlreiche Außerungen wie "im Zeitalter großer Festplatten", "riesiger Arbeitsspeicher" und "schneller DSL-Anschlüsse", die zu Hauf in Diskussionen zum Thema Dateigrößen in diesem Forum zu finden sind.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End