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

  • Hallo Commander21,

    habe dein Skript nach den Posts meiner Vorgänger abgeändert.

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    @Der Doc: die Schleife muß aber mit 1 anfangen da in $Split[0] die Anzahl der Textzeilen steht

    @Commander21: außerdem hattest du immer Leerzeilen am Ende der Datei erzeugt:

    mfg (Auto)Bert

  • 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

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...

  • 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 .