#include-once

#cs
	StringAdvanced.au3
	Diese UDF bietet noch mehr _String funktionen, die meiner Meinung nach fehlen.
	Funktionen:

		_String_GetCharacter($s_String, $i_Index)
		_String_GetChars_FromTo($s_String, $i_From, $i_To)
		_String_GetLen_FromTo($s_String, $i_From, $i_To)
		_String_CheckError($s_String)
		_String_CheckState($s_String)
		_String_ToArray($a_Array, $s_String, $i_Index)



	Fehler Codes:

		1 = Der String ist zu lang
		2 = Die Variable bezieht sich auf ein hWnd, und ist kein String.
		3 = Die Variable hat einen Boolean Wert (True/False) und ist daher kein String

#ce

#cs
	_String_GetCharacter Info

	Mit dieser Funktion kann man einen einzelnen Buchstaben eines Strings auslesen.
	Vorausgesetzt, er ist nicht zu groß.
#ce

Func _String_GetCharacter($s_String, $i_Index)
	_String_CheckError($s_String)
	If @error Then
		Return @error
	EndIf
	Local $len = StringLen($s_String)
	Local $c_Struct = DllStructCreate("wchar[" & $len & "]")
	DllStructSetData($c_Struct, 1, $s_String)
	$Char = DllStructGetData($c_Struct, 1, $i_Index)
	Return $Char
EndFunc

#cs
	_String_GetChars_FromTo Info

	Diese Funktion gibt Buchstaben von einem Punkt zum anderen wieder.
	Bsp.:
	_String_GetChars_FromTo("Hallo", 1, 3)
	Ergibt:
	Hal
#ce

Func _String_GetChars_FromTo($s_String, $i_From, $i_To)
	_String_CheckError($s_String)
	If @error Then
		Return @error
	EndIf
	Local $len = StringLen($s_String)
	Local $c_Struct = DllStructCreate("wchar[" & $len & "]")
	Local $ReturnString
	DllStructSetData($c_Struct, 1, $s_String)
	For $i = $i_From To $i_To
		$ReturnString &= DllStructGetData($c_Struct, 1, $i)
	Next
	Return $ReturnString
EndFunc

#cs
	_String_GetLen_FromTo Info

	Diese Funktion ist eine Mischung aus _String_GetChars_FromTo und StringLen.
	Es Checkt, wie lang ein String von Punkt A Nach B ist.
#ce

Func _String_GetLen_FromTo($s_String, $i_From, $i_To)
	_String_CheckError($s_String)
	If @error Then
		Return @error
	EndIf
	Local $len = StringLen($s_String)
	Local $c_Struct = DllStructCreate("wchar[" & $len & "]")
	Local $ReturnString
	DllStructSetData($c_Struct, 1, $s_String)
	For $i = $i_From To $i_To
		$ReturnString &= DllStructGetData($c_Struct, 1, $i)
	Next
	Return StringLen($ReturnString)
EndFunc

#cs
	_String_CheckError Info

	Checkt eigentlich nur, ob ein String gültig ist.
	Nur für Interne benutzung bestimmt.
#ce

Func _String_CheckError($s_String)
	If StringLen($s_String) >= 8192 Then
		SetError(1, 0, -1)
	ElseIf IsHWnd($s_String) Then
		SetError(2, 0, -2)
	ElseIf IsBool($s_String) Then
		SetError(3, 0, -3)
	EndIf
EndFunc

#cs
	_String_CheckState Info

	Checkt, ob ein String groß oder klein geschrieben ist.
	Returns:
			1 = String ist klein
			2 = String ist groß
#ce

Func _String_CheckState($s_String)
	_String_CheckError($s_String)
	If @error Then
		Return @error
	EndIf
	If StringIsLower($s_String) Then
		Return 5
	ElseIf StringIsUpper($s_String) Then
		Return 6
	EndIf
EndFunc

#cs
	_String_ToArray Info

	Fügt einen String einem Array hinzu.
	Es gibt ein paar erklärungen dabei, falls manche von euch den Prozess nicht verstehnen ;)
#ce

Func _String_ToArray(ByRef $a_Array, $s_String, $i_Index)
	_String_CheckError($s_String)
	If @error Then
		Return @error
	EndIf
	Local $Ubound = UBound($a_Array) + 1 ;Hier wird die Anzahl der Elemente in dem Array gezählt und einer hinzugefügt.
	ReDim $a_Array[$Ubound] ;Hier wird der Array neu erstellt, mit dem neuen Element

	For $i = $Ubound - 1 To $i_Index + 1 Step -1
		$a_Array[$i] = $a_Array[$i - 1]  ;Hier werden die Elemente verschoben.
	Next

	$a_Array[$i_Index] = $s_String ;Und zuletzt wird der String in die richtige Position eingefügt.
EndFunc
