StringSplit Problem

  • Hallo,

    ich habe folgendes Problem:

    1. Ich öffne eine Liste m. Trennzeichen ;
    2. Diese Liste möchte ich nun einfach abfragen.

    In einer Zeile sind immer 2 Einträge
    Lied und Interpret
    ...bestimmt mal wieder ein Denkfehler!

    Die Liste sieht so aus

    Spoiler anzeigen


    Dancing Queen;ABBA
    Fernando;ABBA
    Super Trouper;ABBA

    Der Code

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <INet.au3>
    #include <File.au3>

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

    $Liste = FileOpenDialog("Neue Liste", @ScriptDir & "\", "Songliste (*.txt)", 8 )

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

    $file = FileOpen($Liste, 0)

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

    While 1
    $line = FileReadline($file)

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

    $Interpret = StringSplit($line, ";")

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

    MsgBox(0,"Interpret", $Interpret[1])
    MsgBox(0,"Interpret", $Interpret[2])

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

    FileClose($file)

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

    Wend

    [/autoit]


    ;) Grüße Ilse

    3 Mal editiert, zuletzt von Ilse (5. April 2013 um 14:30)

  • Die Includes sind unnötig, genauso wie die Flag von FileOpenDialog.
    FileClose sollte außerhalb der Schleife stehen
    Die Abbruchbedingung der Schleife fehlt.

    [autoit]

    $Liste = FileOpenDialog("Neue Liste", @ScriptDir, "Songliste (*.txt)")
    $File = FileOpen($Liste, 0)

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

    While True
    $Line = FileReadLine($File)
    If @error Then ExitLoop

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

    $Interpret = StringSplit($Line, ";")
    MsgBox(0, "Lied", $Interpret[1])
    MsgBox(0, "Interpret", $Interpret[2])
    WEnd

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

    FileClose($File)

    [/autoit]
  • Hallo,

    muß mich kurz nochmal melden:

    Noch ein Problem:
    Wenn z.B. die Msgbox erscheint,
    möchte ich dass wenn die F1 Taste gedrückt wird, die Msgbox geschlossen wird!

    Beispiel:
    Die Msgbox zeigt das Lied und ich drücke F1 um das Lied. in eine Liste zu kopieren
    dann kommt die nächste Box und ich drücke zB. F2 ...

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    $Liste = FileOpenDialog("Neue Liste", @ScriptDir, "Songliste (*.txt)")
    $File = FileOpen($Liste, 0)

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

    HotKeySet("{F1}", "_Ballade")

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

    While True
    $Line = FileReadLine($File)
    If @error Then ExitLoop

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

    $Interpret = StringSplit($Line, ";")
    MsgBox(0,"In diese Liste eintragen?", $Interpret[1]&@CRLF&@CRLF&"F1=Ballade"&@CRLF&"F2=Fox"&@CRLF&"F3=Oldies"&@CRLF&"F4=Testen"&@CRLF&"Space=Pause")
    ;MsgBox(0, "Lied", $Interpret[1])
    ;MsgBox(0, "Interpret", $Interpret[2])
    WEnd

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

    FileClose($File)

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

    Func _Ballade()

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

    ;FileWriteLine($Ballade, $Interpret[1]&"--"&$Interpret[2])
    MsgBox(4096,"",$Interpret[1]&"- in Balladenliste eingetragen",2)
    EndFunc

    [/autoit]

    Habe mit select Case probiert
    aber ich weiß nicht wie man da die F1 abfragen kann.
    Komme irgendwie nicht weiter.

    Liebe Grüße
    Ilse ;)

  • Gar nicht, da eine MsgBox das Skript blockiert und die HotKeys somit nicht reagieren.
    Am Besten erstellst du eine kleine GUI mit Buttons, das wäre wahrscheinlich sowieso benutzerfreundlicher.

  • Hallo James,

    ich weiß, hm..ich wollte mir das klicken, auswählen...
    mit der Maus ersparen.
    Bei großen Listen ist das sehr umständlich.
    Das geht per Taste schneller...

    Kann man bei einer Gui einen Button mit einem Hotkey auslösen?

    ;) Grüße
    Ilse

    Schade..

  • Kann man bei einer Gui einen Button mit einem Hotkey auslösen?

    Ja.
    Am einfachsten ist es direkt in der Beshriftung einen Hotkey zu setzen, einfach ein "&" vor dem gewünschten HotkeyBuhstaben erlaubt es dem Benutzer mit <ALT>+<Buchststabe> den Button auszuählen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $Button_1, $Button_2, $msg
    GUICreate("My GUI Button") ; will create a dialog box that when displayed is centered

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

    Opt("GUICoordMode", 2)
    $Button_1 = GUICtrlCreateButton("&Run Notepad", 10, 30, 100)
    $Button_2 = GUICtrlCreateButton("Button &Test", 0, -1)

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

    GUISetState() ; will display an dialog box with 2 button

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Button_1
    Run('Notepad.exe') ; Will Run/Open Notepad
    Case $msg = $Button_2
    MsgBox(0, 'Testing', 'Button 2 was pressed') ; Will demonstrate Button 2 being pressed
    EndSelect
    WEnd
    EndFunc ;==>Example

    [/autoit]

    mfg autoBert

  • Hallo,

    merci für die Tipps.
    Werde ich probieren.

    Am besten wäre es den Titel in der Gui zu zeigen
    also nicht in einer Msgbox.
    ... ich kämpfe mich mal durch!


    Liebe Grüße
    Ilse ;)

  • oder such mal "Toast" von Melba23 im englischen Forum.

    Das sind selbstdefinierte Balloon-Tipps.. sieht nett aus, kann variabel ein- und ausgeblendet werden usw..
    Die in Verbindung mit Accels müsste dir geholfen sein..