String zerlegen

Anfängerfragen zum Programmieren mit PureBasic.
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

String zerlegen

Beitrag von ThoPie »

Hallo,
ich möchte einen gegebenen längeren String in relativ gleiche Stücke trennen. Am Besten mal ein Beispiel, ich kann das irgendwie nicht so formulieren.
Folgender String sei gegeben:

Code: Alles auswählen

"aaa bbbbb ccccc dddd e f g hhhhh iiiii"
Ich möchte nun, dass der String bei jedem Leerzeichen das z.B. nach dem 5.,10.,15. Zeichen kommt, dieses Leerzeichen ersetzen, um es dann mit StringField() zerflücken zu können. Das Resultat sollte wie folgt sein:

Code: Alles auswählen

"aaa bbbbb|ccccc|dddd e|f g hhhhh|iiiii"
Also Wörter sollen nicht geteilt werden. Ich möchte also gern eine Prozedur der Art:

Code: Alles auswählen

Procedure.s StringZerlegen(String.s,Stuecklaenge.i,ZeichenAlt.s,ZeichenNeu.s)
Kann mir jemand einen Tipp geben. Danke
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: String zerlegen

Beitrag von STARGÅTE »

Code: Alles auswählen

Procedure.s StringZerlegen(String.s, Stuecklaenge.i, ZeichenAlt.c, ZeichenNeu.c) 
	Protected *Char.Character = @String
	Protected I.i
	While *Char\c
		For I = 1 To Stuecklaenge
			If *Char\c = #NUL
				Break
			EndIf
			*Char + SizeOf(Character)
		Next 
		While *Char\c
			If *Char\c = ZeichenAlt
				*Char\c = ZeichenNeu
				Break
			EndIf
			*Char + SizeOf(Character)
		Wend
		*Char + SizeOf(Character)
	Wend
	ProcedureReturn String
EndProcedure

Debug StringZerlegen("aaa bbbbb ccccc dddd e f g hhhhh iiiii", 5, ' ', '|')
Achtung, die beiden Zeichen hinten werden als Character übergeben, nicht als String!
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

Re: String zerlegen

Beitrag von ThoPie »

Man - wie schnell geht das denn.
Ich wollte nur einen Tipp, da liegt hier die fertige Lösung.
Danke schön. :allright:
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: String zerlegen

Beitrag von STARGÅTE »

Vielleicht noch als Ergenzung (weil wir hier ja im Anfänger-Forum sind):

Mit *Char.Character = @String lasse ich mir die Adresse des Strings geben, und lese bzw. schreibe dann mit *Char\c im nachfolgendem Code immer direkt im Speicher. Das ist sehr viel schneller, als Buchstaben mit den String-Funktionen auszutauschen.
Mit *Char + SizeOf(Character) änder ich dann die Adresse auf das nächte Zeichen (Ascii: 1Byte, Unicode: 2Byte).
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten