Alle nicht Ziffern entfernen...

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
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...

Beitrag von KeyKon »

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
(\/) (°,,,°) (\/)
Benutzeravatar
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:

Beitrag von HeX0R »

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")
Benutzeravatar
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:

Beitrag von KeyKon »

Perfekt THX :allright:
(\/) (°,,,°) (\/)
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Genau für Fälle wie diesen bieten sich Reguläre Ausdrücke geradezu an.
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 "Nicht-Ziffern", diese werden entfernt. Übrig bleiben also nur Zahlen.

\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
Benutzeravatar
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

Beitrag von ts-soft »

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 :wink:
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.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Ja, da gebe ich dir Recht.
Ich habe gerade extra gestestet:

Bei 10.000 Durchläufen
  • RegExp ca 3500 ms
    Pointer 530 ms
Die EXE bläht es aber nicht wesentlich auf:
..................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
Antworten