Daten aus TXT Splitten und in ListView anzeigen

  • Hey,

    hab ein kleines Problem.
    Ich habe eine TXT Datei, die wie folgt ausschaut:

    vorname.nachname;nachname;vorname;passwort;klasse

    Nun habe ich eine GUI

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <file.au3>
    #include <GuiListView.au3>

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

    GUICreate("UserPad - Benutzer") ; will create a dialog box that when displayed is centered
    GUISetState (@SW_SHOW) ; will display an empty dialog box

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

    ;Auswahl der TXT Datei für Benutzer
    $Input_TXTFile = GUICtrlCreateInput("", 10, 20)
    $Btn_BrowseTXTFile = GUICtrlCreateButton("Durchsuchen", 220, 17)

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

    ;Listbox mit allen in der TXT-Datei enthaltenen Benutzern
    $Listview_User = GUICtrlCreateListView("Benutzername |Nachname |Vorname |Passwort |Klasse", 10, 80, 380, 300)

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

    Switch $msg
    Case $Btn_BrowseTXTFile
    $Dest_TXTFile = FileOpenDialog("Bitte wählen Sie eine Datei aus", "", "TXT-Datei (*.txt)")
    If $Dest_TXTFile <> "" Then
    GUICtrlSetData($Input_TXTFile, $Dest_TXTFile)
    ;Array für das auslesen der TXT-Datei
    Dim $Ar_Userlist
    _FileReadToArray($Dest_TXTFile, $Ar_Userlist)
    For $i = 1 To $Ar_Userlist[0]
    _GUICtrlListViewInsertItem($Listview_User, Int(GUICtrlRead($Input_TXTFile)), $Ar_Userlist[$i])
    Next
    Else
    MsgBox(64, "Fehler", "Sie haben keine Datei ausgewählt")
    EndIf
    EndSwitch

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    Wend

    [/autoit]

    Beim auslesen schreibt er logischerweiße alles in die erste Spalte. Ich habe mit StringSplit schon rumgespielt, allerdigns bekomme ich es nicht hin. Möchte das die einzelnen Werte in die entsprechende Spalte geschrieben werden und mit diesen dann weiterarbeiten.

    Wie immer schon mal vielen vielen Dank.

    Gruß
    Marc

  • Danke, so habe ich zumindest dies gelöst :)
    Allerdings gibt er nun zweimal den gelichen Wert aus.
    Wenn ich versuche den String mit [$i] hochzählen zulassen, gitb er mir einen Fehler aus "Subscript used with non-Array variable."
    Er zählt die Reihen also nicht hoch :(
    Irgendwie steh ich heute ein wenig auf dem Schlauch.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <file.au3>
    #include <GuiListView.au3>

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

    GUICreate("UserPad - Benutzer") ; will create a dialog box that when displayed is centered
    GUISetState (@SW_SHOW) ; will display an empty dialog box

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

    ;Auswahl der TXT Datei für Benutzer
    $Input_TXTFile = GUICtrlCreateInput("", 10, 20)
    $Btn_BrowseTXTFile = GUICtrlCreateButton("Durchsuchen", 220, 17)

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

    ;Listbox mit allen in der TXT-Datei enthaltenen Benutzern
    $Listview_User = GUICtrlCreateListView("Benutzername |Nachname |Vorname |Passwort |Klasse", 10, 80, 380, 300)

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

    Switch $msg
    Case $Btn_BrowseTXTFile
    $Dest_TXTFile = FileOpenDialog("Bitte wählen Sie eine Datei aus", "", "TXT-Datei (*.txt)")
    If $Dest_TXTFile <> "" Then
    GUICtrlSetData($Input_TXTFile, $Dest_TXTFile)
    ;Array für das auslesen der TXT-Datei
    Dim $Ar_Userlist
    Dim $Str_return
    _FileReadToArray($Dest_TXTFile, $Ar_Userlist)

    For $i = 1 To $Ar_Userlist[0]
    $Str_return = StringReplace($Ar_Userlist[1], ";", "|")
    _GUICtrlListViewInsertItem($Listview_User,$Ar_Userlist,$Str_return)
    Next
    Else
    MsgBox(64, "Fehler", "Sie haben keine Datei ausgewählt")
    EndIf
    EndSwitch

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    Wend

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Hi,

    tausche mal den mittleren Teil aus

    etwa so:

    Spoiler anzeigen
    [autoit]


    Switch $msg
    Case $Btn_BrowseTXTFile
    $Dest_TXTFile = FileOpenDialog("Bitte wählen Sie eine Datei aus", "", "TXT-Datei (*.txt)")
    If $Dest_TXTFile <> "" Then
    $line = 1
    While 1
    $read = FileReadLine($Dest_TXTFile,$line)
    If @error = -1 Then ExitLoop
    $fill = ""
    $line = $line + 1
    $split = StringSplit($read,";")
    for $n = 1 to 5
    $fill = $fill & $split[$n] & "|"
    Next
    GUICtrlCreateListViewItem($fill,$Listview_User)
    WEnd
    Else
    MsgBox(64, "Fehler", "Sie haben keine Datei ausgewählt")
    EndIf
    EndSwitch

    [/autoit]

    Edit Mega: Autoit-Tags

    Ciao und Gruß

    Rabbit

  • Sehr schön danke.
    Funktioniert, aber müsste es denn nicht auch mit meiner Methode im zweiten Post gehen?! Dann könnte ich mir ein bisschen Quelltext sparen, oder?!