StringAdvanced UDF

  • Hallo.
    Heute zeige ich euch meine neueste UDF, die StringAdvanced UDF.
    Die UDF enthält ein paar zusätzliche Funktionen, die ich manchmal beim Scripten vermisst habe.
    Aber jetzt habe ich sie selber gemacht :)
    Das Script gibts zum Download im Anhang.
    Im Script werden die einzelnen Funktionen auch erklärt.
    Es ist übrigens auch mein erstes Script mit DLL Strukturen ^^
    Ich würde mich über Kritik und Verbesserungsvorschläge freuen.

    P.S.: Beim Testen habe ich gemerkt, das eine meiner Funktionen bereits existiert, und zwar _String_GetChars_FromTo ist schon _StringBetween, aber ich wollte
    die Funktion trotzdem mal drinne lassen, weil ich mal gucken wollte, ob meine auch so gut wird, wie _StringBetween.

    Viel Spaß mit der UDF, und wenn ihr Bugs findet, bitte Melden.

    MfG. PrideRage

    Edit: String begrenzung ist nun höher und es wird wchar statt char verwendet.

    • Offizieller Beitrag

    Hi,
    braucht man sicher ab und an.
    Aber warum die Limitierung auf 256 Zeichen?
    Ich hab mal deine Func _String_GetCharacter etwas umgemodelt und im Bsp. gezeigt, dass auch große Stringlängen kein Problem bereiten.
    Übrigens empfiehlt es sich zur besseren Flexibilität "wchar" zu verwenden.
    Achja: Fehlerrückgabe sollte als @error und numerisch erfolgen.

    [autoit]

    $s = ''
    For $i = 1 To 4096
    $s &= Random(1,9,1)
    Next
    ConsoleWrite('letzter(4096) = ' & StringRight($s,1) & @CRLF)
    ConsoleWrite(_String_GetCharacter($s, 4096) & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    Func _String_GetCharacter($s_String, $i_Index)
    Local $len = StringLen($s_String)
    If $i_Index > $len Then Return SetError(1,0,-1)
    Local $c_Struct = DllStructCreate("wchar[" & $len+1 & "]")
    DllStructSetData($c_Struct, 1, $s_String)
    Return DllStructGetData($c_Struct, 1, $i_Index)
    EndFunc

    [/autoit]
  • StringMid ist nicht genau dasselbe wie _String_GetCharacter, aber ich gebe zu, das man dasselbe mit StringMid wie mit _String_GetCharacter erreichen kann.
    Und _String_ToArray gibts auch schon in _ArrayInsert, wollts aber mal probieren, denn wenn man nur das macht, was man kann, lernt man nichts.

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Hi, da ich gerade auf der Suche nach String-Funktionen war, bin ich auf diesen Thread gestoßen. Deine Funktionen sind leider mehr oder weniger überflüssig, um sie in AutoIt einzusetzen. Folgender Code macht exakt identisches und fängt Fehler ab:

    Spoiler anzeigen
    [autoit]

    #include-once

    [/autoit] [autoit][/autoit] [autoit]

    Func _String_CheckState(Const $S)
    Local $fReturn = False
    If StringIsLower($S) Then
    $fReturn = True
    ElseIf StringIsUpper($S) Then
    $fReturn = False
    Else
    SetError(1)
    EndIf
    Return $fReturn
    EndFunc ;==>_String_CheckState

    [/autoit] [autoit][/autoit] [autoit]

    Func _String_GetCharacter(Const $S, Const $iINDEX)
    Return StringMid($S, $iINDEX, 1)
    EndFunc ;==>_String_GetCharacter

    [/autoit] [autoit][/autoit] [autoit]

    Func _String_GetChars_FromTo(Const $S, Const $iSTART, Const $iEND)
    Return StringMid($S, $iSTART, _String_GetLen_FromTo($S, $iSTART, $iEND))
    EndFunc ;==>_String_GetChars_FromTo

    [/autoit] [autoit][/autoit] [autoit]

    Func _String_GetLen_FromTo(Const $S, Const $iSTART, Const $iEND)
    Return ($iEND - $iSTART + 1)
    EndFunc ;==>_String_GetLen_FromTo

    [/autoit] [autoit][/autoit] [autoit]

    Func _String_ToArray(ByRef $avArray, Const $S, Const $iINDEX)
    Local Const $iSIZE = UBound($avArray)

    [/autoit] [autoit][/autoit] [autoit]

    If Not UBound($avArray, 0) = 1 Then Return SetError(1, 0, False)
    If $iINDEX < 0 Or $iINDEX > $iSIZE Then Return SetError(2, 0, False)

    [/autoit] [autoit][/autoit] [autoit]

    ReDim $avArray[$iSIZE + 1]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = $iSIZE To ($iINDEX + 1) Step -1
    $avArray[$i] = $avArray[$i - 1]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $avArray[$iINDEX] = $S
    Return True
    EndFunc ;==>_String_ToArray

    [/autoit]


    Wobei, wie bereits angemerkt, _String_ToArray schon als _ArrayInsert existiert (und meiner Meinung nach auch einer Array-Funktion darstellt und keine String-Funktion). Des Weiteren machen _String_CheckState und _String_GetLen_FromTo wenig Sinn, wobei nur noch zwei Einzeiler-UDFs übrig bleiben... Bei extrem häufiger Nutzung könnten diese aber durchaus Anwendung finden (weniger Schreibarbeit)...

  • Erstmal Hi @ schlechte Kommentar schreiber ^^
    Ich weiss selbst, dass es überflüßig ist, wollte mich aber mit AutoIt weiterbilden.
    Und da erschienen mir die Funktionen nützlich, aber mittlerweile weiss ich, dass es nicht der Fall ist.

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Alles klar, dann evtl. aus der Signatur nehmen. Wie schon an anderer Stelle angemerkt, kann dies bei Einsteigern/Neulingen den falschen Eindruck erwecken. Sollte auch kein schlechter Kommentar sein:

    Zitat

    Bei extrem häufiger Nutzung könnten diese aber durchaus Anwendung finden (weniger Schreibarbeit)...


    Deine Funktionen haben mir immerhin Anregung für meine String-Bibliothek geliefert...