Nützliche String-Funktionen (z. B. StringField_InsertString)
Verfasst: 13.10.2006 00:31
Hallo!
Währned meine kleine Schwester mich in der Lobby von "Age of Empires 2" hat warten lassen, fing ich das hier an und führte es später for. Mittlerweile sind 4 kleine Funktionen entstanden, die ins Kapitel "Strings" gehören; und ich hoffe, dass dies Proceduren irgendwann in PB eingebaut werden, auch wenn sie von wem anders noch optimiert werden.
Wenn ihr noch weitere Proceduren habt, her damit, damit ich sie diesem Post anhängen kann! Dann sind die Procs nicht über den ganzen Thread verteilt.
Hinweis: Zum Einheitlichen Testen (fast) aller Proceduren sind die am Anfang befindlichen Konstanten gedacht!!!
Währned meine kleine Schwester mich in der Lobby von "Age of Empires 2" hat warten lassen, fing ich das hier an und führte es später for. Mittlerweile sind 4 kleine Funktionen entstanden, die ins Kapitel "Strings" gehören; und ich hoffe, dass dies Proceduren irgendwann in PB eingebaut werden, auch wenn sie von wem anders noch optimiert werden.

Wenn ihr noch weitere Proceduren habt, her damit, damit ich sie diesem Post anhängen kann! Dann sind die Procs nicht über den ganzen Thread verteilt.
Code: Alles auswählen
#Franz="Franz jagt im komplett verwahrlosten Taxi quer durch Bayern."
#Fuchs="The quick brown fox jumps over the lazy dog."
#Jack="Jackdaws loves my big sphinx of quarz."
; Eigenen Test-String festlegen:
#Teststring=#franz
Procedure.s StringField_InsertString(String$, InsertString$, Index=1, Separator$=" ") ; by AND51
Protected n.l, position.q
If Index > CountString(String$, Separator$) And Not Right(String$, Len(Separator$)) = Separator$
String$+Separator$
EndIf
If FindString(String$, Separator$, 1)
For n=1 To Index
position=FindString(String$, Separator$, position+1)
Next
ProcedureReturn Left(String$, position)+InsertString$+Separator$+Right(String$, IntQ(Len(String$))-position)
Else
ProcedureReturn String$
EndIf
EndProcedure
Debug StringField_InsertString(#Teststring, "PureBasic", 1, ".")
Procedure.s StringField_SwapFields(String$, FieldA, FieldB, Separator$=" ") ; by AND51
If FieldA <> FieldB
String$+Separator$
If FieldA > FieldB
Swap FieldA, FieldB
EndIf
Protected FieldA$=StringField(String$, FieldA+1, Separator$), FieldB$=StringField(String$, FieldB+1, Separator$)
FieldA=FindString(String$, FieldA$, 1)
FieldB=FindString(String$, FieldB$, 1)
ProcedureReturn Left(Left(String$, FieldA-1)+FieldB$+Mid(String$, FieldA+Len(FieldA$), FieldB-FIeldA-Len(FieldA$))+FieldA$+Right(String$, Len(String$)-(FieldB+Len(FieldB$))+1), Len(String$)-Len(Separator$))
Else
ProcedureReturn String$
EndIf
EndProcedure
Debug StringField_SwapFields(#Teststring, 7, 1)
Procedure.s StringField_RemoveField(String$, Index, Separator$=" ") ; by AND51
Protected n.l=CountString(String$, Separator$), position.q
If Index > n
Index=n
EndIf
For n=1 To Index
position=FindString(String$, Separator$, position+1)
Next
ProcedureReturn Left(String$, position)+Right(String$, Len(String$)-(position+Len(StringField(String$, Index+1, Separator$)))-Len(Separator$))
EndProcedure
Debug StringField_RemoveField(#Teststring, 3)
Procedure.s Space2(Length, Fill$) ; by AND51
Protected space.s, n.l
If Not Length % Len(Fill$) And RemoveString(Fill$, " ")
space=Space(Length*Len(Fill$))
ReplaceString(space, Space(Len(Fill$)), Fill$, 2)
ElseIf RTrim(Fill$)
For n=1 To Length
space+Fill$
Next
Else
space=Space(Length*Len(Fill$))
EndIf
ProcedureReturn space
EndProcedure
Debug Space2(34, "AB") ; 'In Place'-Ersetzung, wenn kein Rest bei Length/Len(Fill$)
Debug space2(3, "PureBasic")