Kann _FileWriteFromArray ein 2D array schreiben???

  • Irgendwie stehe ich gerade auf dem Schlauch, aber die Hilfe sagt mir doch dass _FileWriteFromArray mit 2D array zurecht kommt!?
    (Die englische Hilfe spricht von 2D arrays: http://www.autoitscript.com/autoit3/docs/l…teFromArray.htm)

    Bin ich gerade blind???

    [autoit]


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

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

    Global $aTest[1][2] = [[1, "Test"]]
    _ArrayDisplay($aTest)
    _FileWriteFromArray("test1", $aTest, 0, 0, "|")
    ReDim $aTest[UBound($aTest) + 1][2]
    $aTest[UBound($aTest) - 1][0] = 2
    $aTest[UBound($aTest) - 1][1] = "Test"
    _ArrayDisplay($aTest)
    _FileWriteFromArray("test2", $aTest)

    [/autoit]

    Ohne die beiden Zeilen mit _FileWriteFromArray läuft es...
    Mit den beiden Zeilen bekomme ich folgende Fehlermeldung: "C:\Program Files\AutoIt3\Include\File.au3 (272) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:"

    2 Mal editiert, zuletzt von klausdiemaus (19. Juli 2012 um 17:24) aus folgendem Grund: Gelöst! Die File.au3 ist fehlerhaft.

  • also bei 1D Array krieg ich kein Fehler ;(

    ich weiß jetzt aber nicht wieso das mit 2D Arrays nicht geht -> die File.au3 spuckt folgendes aus:

    C:\Programme\AutoIt3\Include\File.au3 (256) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    If FileWrite($hFile, $a_Array[$x] & @CRLF) = 0 Then
    If FileWrite($hFile, ^ ERROR

    Also liegt's wohl daran das es ein 2D Array ist

    und bei

    [autoit]


    _FileWriteFromArray("test1", $aTest,0,0,"|")

    [/autoit]


    spuckt er mir:
    C:\Dokumente und Einstellungen\***\***\Neu AutoIt v3 Script.au3 (18) : ==> Incorrect number of parameters in function call.:
    Also erkennt er den letzten Parameter auch nicht !

    :thumbup:

    Einmal editiert, zuletzt von bobekos (19. Juli 2012 um 16:33)

  • Ein kurzer Blick in die File.au3 genügt. Man kann an die Funktion nur eindimensionale Arrays übergeben.
    Mit etwas Logik kann man sich auch eine eigene Funktion für 2D-Arrays schreiben. Versuch es doch mal. ;)

  • Also ich benutze AutoIt 3.3.8.1 und da sollte es laut der Hilfe mit einem 2D array funktionieren.
    (btw ich sehe gerade die deutsche Hilfe hat das noch gar nicht mit drin http://www.autoit.de/dokumentation_…teFromArray.htm)

    Also in der englischen Hilfe steht dass es auch mit einem 2D array geht:
    Delimiter character(s) for 2-dimension arrays. default="|"


    Außerdem bei einem kurzen Blick in die File.au3 finde ich, dass $iDim aus der File.au3 gleich 2 ist und damit der switch den case 2 auswählt, bis dahin läuft ja alles richtig... Aber Case 2 sollte doch einen 2D array schreiben können!?

    [autoit]


    Case 2
    Local $s_Temp
    For $x = $i_Base To $i_UBound
    $s_Temp = $a_Array[$x][0]
    For $y = 1 To $iDims
    $s_Temp &= $s_Delim & $a_Array[$x][$y]
    Next
    If FileWrite($hFile, $s_Temp & @CRLF) = 0 Then
    $ErrorSav = 3
    ExitLoop
    EndIf
    Next
    EndSwitch

    [/autoit]

    edit:
    bobekos: bei dir erkennt er den letzten parameter nicht? Hast du auch die AutoIt 3.3.8.1 ???
    Ich glaube vorher gab es den Parameter $s_Delim - Optional: Delimiter character(s) for 2-dimension arrays. default="|" nicht...

    3 Mal editiert, zuletzt von klausdiemaus (19. Juli 2012 um 16:51)

  • Vielen Dank!
    Mit For $y = 1 To UBound($a_Array, 2)-1 funktionierts!

    Gibt es dafür schon einen Bugreport damit es in der nächsten Version nicht auch wieder falsch ist?
    edit: ja gibt schon einen bugreport, ist auch schon gefixt!
    http://www.autoitscript.com/trac/autoit/ticket/2125

    Einmal editiert, zuletzt von klausdiemaus (19. Juli 2012 um 17:29)