Array Problem

  • Hi,
    bin ein bischen ein Anfänger :)

    Ich komme nicht ganz klar mit einer alten erklärung die ich hier vorfand.
    Folgendes :
    Ich muss aus einer Datei die unser Inventar wiedergibt, dieses Inventar in eine neue Software eingeben.
    Leider kann ich diese nicht so richtig Importieren.
    Also heist es von Hand einpflegen.

    Die Datei sieht so aus, kleiner auszug daraus.

    Code
    675013;Schrank Obix Büro 1  hund;15.04.2008
    675014;Votus Beistelltisch Büro1  hund;15.04.2008

    Jetzt würde ich diese gerne zeilenweise abarbeiten und die mit ";" getrennten bereiche in Variablen an das Programm weitergeben.
    Nur komme ich mit den Mehrdimensionalen Arrays nun gar nicht klar.
    Habe mir das Beispiel https://autoit.de/index.php?page=Thread&postID=23289 hier mal zu gemüte geführt.

    Dort der Beitrag von Xeno bringt mir zwar die ganze zeile, aber nicht die einzelnen werte.
    Und mit der Seperator erklärung von Bugfix bin ich ein wenig überfordert :(

    Das Beispiel von Xeno :

    [autoit]


    #include<File.au3>
    CSVlesen("c:\Downloads\AutoIt-Skripte\Entwicklung\ForumTests\20070720 Planung SONAR 2007.csv")

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

    Func CSVlesen($file) ;Liest den Inhalt der übegebebenen CSV-Datei in ein zweidimensionales Array und gibt dieses zurück (erstes Element enthält Anzahl Zeilen)
    Local $CountLines = _FileCountLines($file)
    Local $zeilen[$CountLines+1]
    Local $zeile
    $zeilen[0] = $CountLines
    $csv = FileOpen($file, 0)
    For $i = 1 To $CountLines
    $zeile = FileReadLine($csv, $i)
    If @error = -1 Then
    ExitLoop
    EndIf
    MsgBox(64, "Test", "Inhalt: " & $zeile) ;hier wird die ganze Zeile korrekt ausgegeben.
    $zeilen[$i] = StringSplit($zeile, ";")
    MsgBox(64, "Test", "Inhalt: " & $zeilen[$i]) ;ist scheinbar leer
    ;MsgBox(64, "Test", "Inhalt: " & $zeilen[$i][0]) ;erzeugt Fehlermeldung!
    Next
    FileClose($csv)
    Return $zeilen
    EndFunc

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

    Bekomme es damit leider nicht hin.
    Kann mir da jemand ein kleines Beispiel zusammen zimmern ?

    Vielen dank im voraus.

    MfG

    Edit :
    Sorry doch zu einem verwertbaren ergebnis gekommen.

    [autoit]


    Func CSVlesen($file) ;Liest den Inhalt der übegebebenen CSV-Datei in ein zweidimensionales Array und gibt dieses zurück (erstes Element enthält Anzahl Zeilen)
    Local $CountLines = _FileCountLines($file)
    Local $zeilen[$CountLines+1]
    Local $zeile
    $zeilen[0] = $CountLines
    $csv = FileOpen($file, 0)
    For $i = 1 To $CountLines
    $zeile = FileReadLine($csv, $i)
    If @error = -1 Then
    ExitLoop
    EndIf
    MsgBox(64, "Test", "Inhalt: " & $zeile) ;hier wird die ganze Zeile korrekt ausgegeben.
    $zeilen = StringSplit($zeile, ";")
    MsgBox(64, "Test", "Inhalt: " & $zeilen[1]) ;ist scheinbar leer
    MsgBox(64, "Test", "Inhalt: " & $zeilen[2]) ;erzeugt Fehlermeldung!
    MsgBox(64, "Test", "Inhalt: " & $zeilen[3]) ;erzeugt Fehlermeldung!
    Next
    FileClose($csv)
    Return $zeilen
    EndFunc

    [/autoit]


    Wenn ich statt $zeilen[$i] nur $zeilen nehme habe ich ja schon das gewünschte ergebnis.

    2 Mal editiert, zuletzt von Observer (5. Dezember 2008 um 15:40)

  • MsgBox zeigt keine Arrays an und StringSplit liefert die einzelnen "Teile" aber in einem zurück

    [autoit]

    #include <Array.au3>
    _arraydisplay($zeilen[$i])

    [/autoit]

    statt

    [autoit]

    MsgBox(64, "Test", "Inhalt: " & $zeilen[$i]) ;ist scheinbar leer

    [/autoit]

    Mit deiner zweiten Version überschreibst du doch jedes Mal die Zeile vom letzten Durchlauf