Problem mit StringSplit

  • Nabend.

    Hab en Problem mit nem aktuellen Script.

    Die Funktion des scripts erklärt sich dann vllt selbst...

    Das Problem ist i.wo zwichen Zeile 99 und 102.

    Hier soll der Text der in der Datei steht, aufgeteilt werden und in die Liste eingetragen werden.
    Wenn ich es so mit GUICtrlSetData in die Liste setze, wird nichts getrennt. auch nicht, wenn in der Datei alles untereinander steht.

    Hier mal der Code.
    Is noch net fertig, aber egal:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <IE.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>
    #include <ListBoxConstants.au3>
    #include <File.au3>

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

    #Region ### START Koda GUI section ###
    $Form1 = GUICreate("Web-Helfer", 639, 440, 202, 127)
    $List1 = GUICtrlCreateList("", 16, 72, 225, 292, BitOR($LBS_STANDARD, $LBS_EXTENDEDSEL))
    GUICtrlSetData(-1, "www.autoit.de")
    GUICtrlCreateLabel("Web-Helfer 1.0", 8, 0, 229, 41)
    GUICtrlSetFont(-1, 24, 800, 4, "Arial")
    GUICtrlSetColor(-1, 0x0000FF)
    $Input1 = GUICtrlCreateInput("", 264, 96, 353, 21)
    GUICtrlCreateLabel("Seite eingeben:", 264, 72, 105, 20)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateLabel("Version 1.0", 568, 416, 57, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateLabel("Made by: Commander21 ( http://www.autoit.de )", 8, 416, 202, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    $Checkbox1 = GUICtrlCreateCheckbox("Automatisch speichern", 416, 168, 145, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlCreateLabel("Optionen:", 416, 144, 66, 20)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetColor(-1, 0x0000FF)
    $Checkbox2 = GUICtrlCreateCheckbox("Neue Seite sofort öffnen", 416, 200, 200, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Checkbox3 = GUICtrlCreateCheckbox("Beenden abfragen *", 416, 232, 137, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Checkbox4 = GUICtrlCreateCheckbox("Automatisch Laden", 416, 264, 177, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlCreateLabel("* Fragt, ob wirklich beendet", 416, 360, 133, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateLabel("werden soll, oder nicht.", 424, 376, 113, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    $Button1 = GUICtrlCreateButton("Web-Seite hinzufügen", 264, 120, 137, 25)
    $Button2 = GUICtrlCreateButton("Ausgewählte Seite öffnen", 264, 200, 137, 25)
    $Button3 = GUICtrlCreateButton("Seite sofort öffnen", 264, 280, 137, 25)
    $Button5 = GUICtrlCreateButton("Liste Laden", 16, 376, 129, 25)
    $Button6 = GUICtrlCreateButton("Eintrag löschen", 152, 376, 89, 25)
    GUICtrlCreateLabel("Fügt die eingegebene Seite", 264, 152, 134, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateLabel("der Liste hinzu.", 264, 168, 75, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateLabel("Öffnet die Seite sofort.", 264, 312, 109, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateLabel("Öffnet die in der Liste", 264, 232, 104, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateLabel("ausgewählte Seite.", 264, 248, 94, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateGroup(" Liste ", 8, 48, 241, 361)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup(" Seite hinzufügen / öffnen ", 256, 48, 369, 361)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x0000FF)
    $Button4 = GUICtrlCreateButton("Speichern", 264, 344, 137, 25)
    GUICtrlCreateLabel("Speichert die Liste ab.", 264, 376, 109, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup(" Optionen ", 408, 120, 209, 281)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $Input1Read = GUICtrlRead ($Input1)
    GUICtrlSetData ($List1, $Input1Read)
    GUICtrlSetData ($Input1, "")
    Case $Button2
    $List1Read = GUICtrlRead ($List1)
    _IECreate ($List1Read)
    Case $Button3
    $List1Read = GUICtrlRead ($List1)
    _IECreate ($Input1Read)
    Case $Button4
    FileOpen (@ScriptDir & "\SiteList.dat", 2)
    $List1Count = _GUICtrlListBox_GetCount ($List1)
    For $i = 0 To $List1Count
    FileWrite (@ScriptDir & "\SiteList.dat", _GUICtrlListBox_GetText ($List1, $i) & ";")
    Next
    Case $Button6
    $List1CurSel = _GUICtrlListBox_GetCurSel ($List1)
    _GUICtrlListBox_DeleteString ($List1, $List1CurSel)
    Case $Button5
    GUICtrlSetData ($List1, "")
    $FileRead = FileRead (@ScriptDir & "\SiteList.dat")
    $Split = StringSplit ($FileRead, ";")
    GUICtrlSetData ($List1, $Split)
    EndSwitch
    WEnd

    [/autoit]

    Also, hoffe ich hab das Problem gut rüber gebracht, so dass mir einer helfen kann.
    THX schonmal


    MfG

  • Wenn ich es so mit GUICtrlSetData in die Liste setze, wird nichts getrennt. auch nicht, wenn in der Datei alles untereinander steht.


    Es wird schon getrennt, nur kann GUICtrlSetData nichts mit deinem Array $Split anfangen. Du musst die Elemente des Arrays einzeln übergeben.
    Folgender Code liefert den ersten gesplitteten Eintrag:

    [autoit]

    GUICtrlSetData ($List1, $Split[1])

    [/autoit]


    Das machst du dann in einer Schleife und es sollte passen.

    Oder du verwendest

    [autoit]

    Opt("GUIDataSeparatorChar",";") ;"|" ist der Standard

    [/autoit]


    Dann musst du nichts splitten und kannst gleich dein $FileRead an $List1 übergeben:

    [autoit]

    GUICtrlSetData ($List1, $FileRead)

    [/autoit]

    Gruß Ashpool

    Gruß Ashpool

    Zitat von mir

    Bin immer wieder erstaunt, wie begrenzt ein Horizont sein kann.

  • Dann einfach in ne Schleife gepackt und mit Ubound durchlaufen lassen

    [autoit]

    ubound

    [/autoit]
    Spoiler anzeigen
    [autoit]


    For $i= 0 to UBound($Split,1) -1
    GUICtrlSetData ($List1,$Split[$i])
    Next

    [/autoit]

    Geht natürlich auch mit While aber das muß du selber rausfinden ;)
    Die Hilfe macht es möglich.

    MfG
    Der_Doc

  • macht das doch nicht so kompliziert...
    der Standard-Trenner in AutoIt ist das "|"-Zeichen.
    @Commander21: wenn Du in Deiner Datei SiteList.dat die Einträge mit diesem Zeichen trennst, dann kannst Du die Datei direkt an das Control übergeben.
    Das macht dann den Rest schon ;)
    siehe:

    Spoiler anzeigen
    [autoit]

    Case $Button5
    GUICtrlSetData ($List1, "")
    ;wenn Daten in SiteList.dat mit "|" getrennt werden ...
    GUICtrlSetData ($List1,FileRead (@ScriptDir & "\SiteList.dat"))

    [/autoit]

    Ansonsten vor dem Übergeben der Datei an das Control einfach den Standard-Seperator ändern:

    Spoiler anzeigen
    [autoit]

    Case $Button5
    Opt("GUIDataSeparatorChar",";")
    GUICtrlSetData ($List1, "")
    GUICtrlSetData ($List1,FileRead (@ScriptDir & "\SiteList.dat"))
    Opt("GUIDataSeparatorChar","|")

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hehe, super.
    Danke für die vielen guten Antworten.
    Ich nehm die Schnuffel ^^
    Behalte aber die anderen mal im Hinterkopf, könnten nochmal nützlich sein ^^

    Eine Frage hätte ich aber noch.
    Und zwar ab Case $Button4.

    Hier wird ja die Liste abgespeichert.
    So wie es mit Raupi im Chat schon erklärt hat, so hab ich dann mehr oder weniger umgesetzt ^^
    Allerdings, wird am ende noch eine 0 dazugespeichert?!
    Wie kann ich das verhindern?

    Handelt sich um den Code...

    [autoit]

    Case $Button4
    FileOpen (@ScriptDir & "\SiteList.dat", 2)
    $List1Count = _GUICtrlListBox_GetCount ($List1)
    For $i = 0 To $List1Count
    FileWrite (@ScriptDir & "\SiteList.dat", _GUICtrlListBox_GetText ($List1, $i) & "|")
    Next

    [/autoit]
  • Allerdings, wird am ende noch eine 0 dazugespeichert?!
    Wie kann ich das verhindern?


    $ListCount enthält die Anzahl der Einträge (z.B. 4), deine Schleife zählt also von 0 bis 4, d.h. sie wird 5 mal durchlaufen, obwohl nur 4 Einträge vorhanden sind.
    Die 4 Einträge haben die Indizes 0-3, d.h. den Eintrag mit dem Index 4 gibt es nicht, deshalb die '0'.

    Versuche es mal so:

    [autoit]

    For $i = 0 To $List1Count-1

    [/autoit]

    Gruß Ashpool

    Gruß Ashpool

    Zitat von mir

    Bin immer wieder erstaunt, wie begrenzt ein Horizont sein kann.

  • Mann Mann :D vieleicht sollte man wirklich öfter mal die Hilfe nutzen und schauen was man mit der Funktion machen kann.
    Ich wuste net das es auch ein 0 basiertes Array bei Split gibt. :S
    Das schöne ist .... nun weis ich es :rofl:

    MfG
    Der_Doc

    • Offizieller Beitrag

    vieleicht sollte man wirklich öfter mal die Hilfe nutzen und schauen was man mit der Funktion machen kann.

    :D Meist reicht es (um einen Überblick zu haben) bei einer neuen AutoIt-Version die Changes anzuschauen. Ich glaub, die StringSplit-Anpassung ist seit 3.3.0.0 .