Seite 1 von 4

Schreibweise ändern (so geht das <> So Geht Das)...?

Verfasst: 04.02.2008 22:32
von Ghosty1967
In VB gab es einen String-Befehl, mit dem man einen String in seiner Schreibweise
ändern konnte (weiß nich mehr welcher), also z.B. machte man aus
"dies ist ein testtext, um zu zeigen was passierte" <> "Dies Ist Ein Testtext, Um Zu Zeigen Was Passierte"
gibt es sowas in PB bzw. kennt jemand einen Kniff, um sowas zu realisieren?

Verfasst: 04.02.2008 22:49
von AND51
Jedem großzuschreibenden Buchstaben steht doch ein Lerzeichen voran, oder? Dann machs doch so:

Code: Alles auswählen

Procedure.s SoGehtDas(text.s)
	Protected n.l
	For n='A' To 'Z'
		ReplaceString(text, " "+Chr(n), " "+Chr(n), #PB_String_InPlace)
	Next
	For n='a' To 'z'
		ReplaceString(text, " "+Chr(n), " "+Chr(n-32), #PB_String_InPlace)
	Next
	ProcedureReturn text
EndProcedure

Debug SoGehtDas("Dies ist ein testtext, um zu zeigen was passierte")
Dem ersten steht kein Leerzeichen voran, also mach selber eines davo und benutze hinterher LTrim().

Verfasst: 04.02.2008 22:53
von Andreas_S

Code: Alles auswählen

Procedure.s irgendeinBefehl( str.s , firstLetterToo )
	Protected *ptr.CHARACTER = @str, space
	
	If firstLetterToo
		*ptr\c - 32
	EndIf
	
	While *ptr\c <> 0
		If *ptr\c = 32
			space = 1
		Else
			If space = 1
				*ptr\c - 32
			EndIf
			space = 0
		EndIf
		*ptr + SizeOF(CHARACTER)
	Wend
	
	ProcedureReturn str
EndProcedure


Debug irgendeinBefehl("hallo  ich  bin  ein  string", 1)

//edit:
jetzt auch mit mehr lehrzeichen xD

//edit:
um HeX0R's und Unicodes' willen auch Unicode fähig

Andreas :lol:

Verfasst: 04.02.2008 23:16
von Ghosty1967
Danke Euch... ! :mrgreen:

Verfasst: 04.02.2008 23:18
von HeX0R
Richtig wäre übrigens (soll ja wohl unicodefähig sein):

Code: Alles auswählen

*ptr + SizeOF(CHARACTER)

Verfasst: 04.02.2008 23:25
von Andreas_S
jaja :mrgreen:

unicode muss auch noch sein...


Andreas

Verfasst: 04.02.2008 23:31
von AND51
Übrigens ist man bei deiner Proc gezwungen, den Text mit einem Buchstaben starten zu lassen, wenn man 'firstLetterToo' auf 1 setzt.

Verfasst: 04.02.2008 23:32
von Andreas_S
Ja das stimmt.. und was solls? Ist doch kein Problem...

Andreas

Verfasst: 04.02.2008 23:39
von Andreas_S
Jetzt das ultimative Update :mrgreen:

Code: Alles auswählen

Procedure.s irgendeinBefehl( str.s )
	Protected *ptr.CHARACTER = @str, space = 1
	
	While *ptr\c <> 0
		If *ptr\c = 32
			space = 1
		Else
			If space = 1
				If (*ptr\c >= 97) And (*ptr\c <= 122)
					*ptr\c - 32
					space = 0
				EndIf
			EndIf
		EndIf
		*ptr + SizeOf(CHARACTER)
	Wend
	
	ProcedureReturn str
EndProcedure


Debug irgendeinBefehl("<hallo  +ich  -bin  'ein  ?string")

Andreas

Verfasst: 04.02.2008 23:48
von AND51
Jetzt noch ein viel ultimativeres Update!
@ Andreas_S:
Na, kannst du's auch nur mit 1 Variable? :wink:

@ Thread:

Code: Alles auswählen

Procedure.s Capitalize(text.s)
	Protected *pos.Character=@text
	While *pos\c
		While *pos\c < 'a' Or *pos\c > 'z'
			*pos+SizeOf(Character)
		Wend
		*pos\c-32
		While (*pos\c >= 'a' And *pos\c <= 'z') Or (*pos\c >= 'A' And *pos\c <= 'Z')
			*pos+SizeOf(Character)
		Wend
	Wend
	ProcedureReturn text
EndProcedure

Debug Capitalize("dies ist ein testtext, um zu zeigen was passierte")
Speedtest folgt...