Daten aus .csv auslesen

  • Hallo, ich möchte Daten aus einer .csv in ein Array laden und die Werte dann vergleichen.

    Trotz dem Tutorial auf AotuitWiki bekomme ich es leider nicht hin und hoffe auf eure Unterstützung.

    So sieht mein Skript bisher aus:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>

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

    $filename = FileOpenDialog("Bitte wähle die Liste aus", "C:\", "CSV Dateien (*.csv)", 1 )

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

    ;Testausgabe
    If @error Then
    MsgBox(4096,"","Keine Datei(en) ausgewählt")
    Else
    $filename = StringReplace($filename, "|", @CRLF)
    MsgBox(4096,"","Es wurde " & $filename & " ausgewählt")
    EndIf

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

    ;Umwandeln der Datei in ein Array
    Dim $arCSV
    _FileReadToArray($filename, $arCSV)
    For $i = 1 To $arCSV[0]
    $arCSV[$i] = StringSplit($arCSV[$i], ";")
    Next

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

    _ArrayDisplay( $arCSV, "Whole array" )

    [/autoit]

    Anbei auch noch die .csv Datei

    Habe ich bei der Schleife etwas vergessen, oder warum ist das Array so leer?

    Gruß Sascha

  • Bevor du die csv-Datei auslesen kannst.
    musst du zuerst die Datei mit

    [autoit]

    Fileopen

    [/autoit]


    öffnen.

    Also etwa so: (habs nicht getestet)

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>

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

    $filename = FileOpenDialog("Bitte wähle die Liste aus", "C:\", "CSV Dateien (*.csv)", 1 )

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

    ;Testausgabe
    If @error Then
    MsgBox(4096,"","Keine Datei(en) ausgewählt")
    Else
    $filename = StringReplace($filename, "|", @CRLF)
    MsgBox(4096,"","Es wurde " & $filename & " ausgewählt")
    EndIf

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

    ;Umwandeln der Datei in ein Array
    Dim $arCSV
    _FileReadToArray($filename, $arCSV)
    For $i = 1 To $arCSV[0]
    $arCSV[$i] = StringSplit($arCSV[$i], ";")
    Next
    _ArrayDisplay( $arCSV, "Whole array" )

    [/autoit]


    Gruss Storyteller

    Make it idiot proof, and someone will build a better idiot!

    Ich würd so gern die Welt verändern, aber Gott gibt mir den Quellcode nicht.

    3 Mal editiert, zuletzt von Storyteller (7. Juli 2010 um 14:15)

  • Die Datei wird schon in FileOpenDialog() geöffnet.

    Das Problem liegt in der FOR-Schleife. StringSplit() liefert seinerseits wieder ein Array, das kannst du nicht in ein Element von $arCSV legen.
    Änder die Schleife mal so ab, dann sollte es funktionieren

    [autoit]


    For $i = 1 To $arCSV[0]
    $tmp = StringSplit($arCSV[$i], ";")
    $arCSV[$i] = $tmp[1]
    Next

    [/autoit]
  • Die Datei wird schon in FileOpenDialog() geöffnet.


    Wusste ich noch nicht schon wieder was gelernt. :)

    Die Lösung die i2c gepostet hat funktioniert einwandfrei. habs kurtzt getestet.

    Gruess Storyteller

    Make it idiot proof, and someone will build a better idiot!

    Ich würd so gern die Welt verändern, aber Gott gibt mir den Quellcode nicht.

  • Die Datei wird schon in FileOpenDialog() geöffnet.


    Das ist völliger Quatsch. FileOpenDialog öffneet die Datei nicht. Es wird nur der Pfad zurückgegeben und @WorkingDir geändert. Sonst passiert nichts.

    Edit: Aber _FileReadToArray öffnet die Datei, daher ist FileOpen hier unnötig und sogar falsch. _FileReadToArray kann mit der Rückgabe von FileOpen nichts anfangen.
    Storyteller: Du hast die Kombination FileOpen/FileClose falsch verwendet. Das sähe richtig so aus:

    [autoit]

    $hFile = FileOpen($sFilename)
    $sContent = FileRead($hFile)
    FileClose($hFile)

    [/autoit]