string split problem

  • hi leute, ich will ein csv file einlesen

    bsp

    1; Berlin

    nun möchte ich dass 1 bei Array[$i][1]
    und Berlin bei Array[$i][2]

    steht das mit Berlin klappt aber nicht


    [autoit]

    Func Dropdown_feed() dim $string
    $csv = FileOpen($bzpath) $anzahl = _FileCountLines($bzpath) MsgBox(0,"TEST", $anzahl)
    Global $zeilen[$anzahl+1][2]
    For $i = 0 to $anzahl $string = FileReadLine($bzpath,$i) For $j = 0 To 1 $zeilen[$i][0] = $i $zeilen[$i][1] = StringSplit($string, ";") $zeilen[$i][2] = StringSplit($string, ";") Next Next
    _ArrayDisplay($zeilen,"TEST")EndFunc

    [/autoit]

    Einmal editiert, zuletzt von holzfelix (15. Februar 2013 um 14:32)

  • StringSplit gibt ein Array zurück.
    Das kannst du nicht einfach so speichern.

    Spoiler anzeigen
    [autoit]

    Func Dropdown_feed()
    Local $sFile = FileRead($bzpath)
    Local $aZeilen = StringSplit($sFile,@CRLF,1)
    Local $i
    Local $zeilen[UBound($aZeilen)][3]
    For $i = 1 To UBound($aZeilen)-1
    Local $aSplit = StringSplit($zeilen[$i],",")
    $zeilen[$i][0] = $i
    $zeilen[$i][1] = $aSplit[1]
    $zeilen[$i][2] = $aSplit[2]
    Next
    _ArrayDisplay($zeilen, "TEST")
    Return $zeilen
    EndFunc ;==>Dropdown_feed

    [/autoit]

    2 Mal editiert, zuletzt von Alcros (15. Februar 2013 um 14:00)

  • danke ja hab ich auch gelesen aber komme auf keinen grünen zweg

    bekomme hier einen fehler:
    Local $aSplit = StringSplit($zeilen[$i],";")


    Local $aSplit = StringSplit(^ ERROR

  • [autoit]

    Func Dropdown_feed()
    Local $string, $temp
    $csv = FileOpen($bzpath)
    $anzahl = _FileCountLines($bzpath)
    MsgBox(0,"TEST", $anzahl)
    Global $zeilen[$anzahl+1][2] ; Globale Deklaration in einer Funktion? Sowas macht man nicht.
    For $i = 0 to $anzahl
    $string = FileReadLine($bzpath,$i)
    For $j = 0 To 1
    $temp = StringSplit($string, ";")
    $zeilen[$i][0] = $i
    $zeilen[$i][1] = $temp[1]
    $zeilen[$i][2] = $temp[2]
    Next
    Next
    _ArrayDisplay($zeilen,"TEST")
    EndFunc

    [/autoit]

  • Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $zeilen[$i][2] = $temp[2]
    ^ ERROR

  • ich denke der rechte teil wird abgeschnitten und geht verlohren also $temp[2] gibt es nicht

  • Ist doch logisch:

    [autoit]


    Func Dropdown_feed()
    Local $string, $temp
    $csv = FileOpen($bzpath)
    $anzahl = _FileCountLines($bzpath)
    MsgBox(0,"TEST", $anzahl)
    Global $zeilen[$anzahl+1][3] ; Globale Deklaration in einer Funktion? Sowas macht man nicht.
    For $i = 0 to $anzahl
    $string = FileReadLine($bzpath,$i)
    For $j = 0 To 1
    $temp = StringSplit($string, ";")
    $zeilen[$i][0] = $i
    $zeilen[$i][1] = $temp[1]
    $zeilen[$i][2] = $temp[2]
    Next
    Next
    _ArrayDisplay($zeilen,"TEST")
    EndFunc

    [/autoit]

    Du hast das Array in Zeile 6 für 2 Werte deklariert, willst aber 3 Eintragen, so sollte es jetzt gehen ;) Und richtig: Globale Deklarationen in Funktionen macht man nicht.

    Edit: Also es liegt nicht an $Temp[2] sondern an deinem zu kleinen $zeilen-Array ;)

    Da es hier doch einige falsch machen:

    Zitat von einem User dieses Forums

    Die Standard-Standart eines Flamingos ist einbeinig. ;)

  • ja das mit Global weiß ich ändr ich auch noch zu gegebener stunde^^...

    aber das mit dem 3 hab ich auch schon probiert ....

    bekomme immer


    Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $zeilen[$i][2] = $temp[2]
    $zeilen[$i][2] = ^ ERROR
    ->14:08:46 AutoIT3.exe ended.rc:1


    die eine forschleife von 0 - 1 is auch fürn eimer^^


    das problem ist wie ich vermuetet dass in $temp nur der ersete teil steht und es kein mehrdimensionales array ist

  • Hier noch eine Alternative, die bei grossen Dateien etwas schneller sein sollte:

    Spoiler anzeigen
    [autoit]

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

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

    $bzpath = @ScriptDir & "\Städte.txt"
    FileReadToArrayVersion()

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

    Func FileReadToArrayVersion()
    Local $aCSV, $i
    _FileReadToArray($bzpath, $aCSV)
    MsgBox(0, "FileReadToArrayVersion", $aCSV[0])
    Local $aCSV2D[$aCSV[0] + 1][2]
    For $j = 1 To $aCSV[0]
    $aSplit = StringSplit($aCSV[$j], ";")
    If $aSplit[0] > 1 Then
    $i += 1
    $aCSV2D[$i][0] = $aSplit[1]
    $aCSV2D[$i][1] = $aSplit[2]
    EndIf
    Next
    $aCSV2D[0][0] = $i
    _ArrayDisplay($aCSV2D, "FileReadToArrayVersion")
    ;Return $aCSV2D
    EndFunc ;==>FileReadToArrayVersion

    [/autoit]

    mfg autoBert