Array variable subscript badly formatted

  • Hallo was mache ich hier falsch
    wenn ich es weiß kann man es hier vielleicht auch nachtragen: http://de.wikibooks.org/wiki/AutoIt:_F…Fehlermeldungen

    [autoit]

    Func _Listview_2_Array($s_Mode)
    Local $array
    $hLvw_Info = ControlGetHandle("","",$Lvw_Info) ; ListView in 2D Array schreiben
    _GUICtrlListView_GetHeader($hLvw_Info)
    $iAnzCol = _GUICtrlListView_GetColumnCount($hLvw_Info)
    $iAnzahl = _GUICtrlListView_GetItemCount($hLvw_Info)
    Local $msg, $array[$iAnzahl+1][$iAnzCol]

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

    For $i = 0 To $iAnzCol -1
    $msg = _GUICtrlListView_GetColumn($hLvw_Info, $i)
    $array[0][$i] = $msg[5]
    Next

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

    For $i = 0 To $iAnzahl - 1
    $a = _GUICtrlListView_GetItemTextArray($hLvw_Info, $i)
    For $j = 1 To $a[0]
    $array[$i+1][$j - 1] = $a[$j]
    Next
    Next

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

    If $s_Mode = "Mail" Then
    Dim $as_Body[99] ; 2D Array für Email Versand zu 1D Array konververtieren <--- hier ist vermutlich die Ursache
    For $i = 1 to UBound($array) -1
    $as_Body[$i] = $array[$i][0] & " - " & $array[$i][1]
    Next
    Return $as_Body
    Else
    $f_exp_file = @DesktopDir & "\InstallUpdateTool-" & @YEAR & "." & @MON & "." & @MDAY & "." & @HOUR & "." & @MIN & "-log.txt"
    For $i = 1 to UBound($array,1) -1
    FileWriteLine($f_exp_file,$array[$i][0] & " - " & $array[$i][1])
    Next
    EndIf
    EndFunc

    [/autoit][autoit]

    Func _Email_Status_Info($s_ToAddress) ; Emailversand der Log/Statusdatei
    FileWriteLine($f_log_file,@CRLF & "# Funktion: _Email_Status_Info() ----------------------------------------------------------")
    GUICtrlCreateListViewItem(_NowCalc() & "|# Starte Funktion: _Email_Status_Info",$Lvw_Info)
    FileWriteLine($f_log_file, _NowCalc() & ": Email wird an " & $s_ToAddress & " versendet.")
    GUICtrlCreateListViewItem(_NowCalc() & "|. Email wird an " & $s_ToAddress & " versendet.",$Lvw_Info)

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

    $s_SmtpServer = "192.168.224.16";"192.168.224.16" ;
    $s_FromName = @UserName;"Info: " & @ComputerName
    $s_FromAddress = @UserName & "@" & @ComputerName
    $s_ToAddress = "hall@l.eu"
    $s_Subject = "InstallUpdateTool: " & GUICtrlRead($Inp_Version)
    Local $as_Body[99]; =
    _Listview_2_Array("Mail")

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

    $Response = _INetSmtpMail($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body,"EHLO " & @computername, -1) ; Email senden
    $err = @error

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

    If $Response = 1 Then
    ;~ MsgBox(0, "Success!", "Mail sent")
    FileWriteLine($f_log_file, _NowCalc() & ": Emailversand erfolgreich")
    GUICtrlCreateListViewItem(_NowCalc() & "|. Emailversand erfolgreich",$Lvw_Info)
    Else
    ;~ MsgBox(0, "Error!", "Mail failed with error code " & $err)
    GUICtrlCreateListViewItem(_NowCalc() & "|. Emailversand nicht erfolgreich. Fehlercode: " & $err,$Lvw_Info)
    FileWriteLine($f_log_file, _NowCalc() & ": Emailversand nicht erfolgreich. Fehlercode: " & $err)
    FileWriteLine($f_log_file,@TAB & "1 - Invalid Parameters ")
    FileWriteLine($f_log_file,@TAB & "2 - Unable to start TCP ")
    FileWriteLine($f_log_file,@TAB & "3 - Unable to resolve IP ")
    FileWriteLine($f_log_file,@TAB & "4 - Unable to create socket ")
    FileWriteLine($f_log_file,@TAB & "5x - Cannot open SMTP session. x indicates the index number of last command issued to the SMTP server. ")
    FileWriteLine($f_log_file,@TAB & "50x - Cannot send body. x indicates the line number of $as_Body (first line is 0). ")
    FileWriteLine($f_log_file,@TAB & "5000 - Cannot close SMTP session ")
    EndIf
    EndFunc

    [/autoit]

    Wie hole ich mir am geschicktesten die Variable aus der einen Funktion in die andere, wie muss ich die zuvor "deklarieren"?

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Auf welche Zeile und auf welches Array bezieht sich die badly formated Meldung denn?

    Was mir auffällt sind folgende Dinge:

    [autoit]


    Func _Listview_2_Array($s_Mode)
    Local $array
    ;...
    Local $msg, $array[$iAnzahl+1][$iAnzCol]

    [/autoit]

    Wieso deklarierst du $array zweimal?

    [autoit]


    If $s_Mode = "Mail" Then
    Dim $as_Body[99] ; 2D Array für Email Versand zu 1D Array konververtieren <--- hier ist vermutlich die Ursache
    For $i = 1 to UBound($array) -1
    $as_Body[$i] = $array[$i][0] & " - " & $array[$i][1]

    [/autoit]

    Kann schonmal böse schief gehen, wie kannst du sicher sein, dass $array nich mehr als 99 Elemente hat? $as_body muss mindestens genauso groß sein wie $array

    [autoit]


    Func _Email_Status_Info($s_ToAddress) ; Emailversand der Log/Statusdatei
    ;...
    Local $as_Body[99]; =
    _Listview_2_Array("Mail")

    [/autoit]

    Auch hier wieder nur 99 groß, davon ab liefert dir die Funktion _listview_2_array doch das Array bereits fertig zurück. Ein deklarieren dürfte da garnicht notwendig sein, wenn dann eher so:

    [autoit]

    Local $as_Body = _Listview_2_Array("Mail")

    [/autoit]


    Natürlich solltest du bevor du damit weiterarbeitest auch prüfen ob du wie erwartet ein Array zurückbekommen hast.

  • Aso fast vergessen. Badly formated erscheint soweit ich mich erinnere, wenn man Arrays mit ungültigen Angaben deklarieren möchte, also zum Beispiel:

    [autoit]


    Global $aTest1[4][0] ; 0 ist ungültig, mindestgröße ist 1
    $aTest1[1][0]="test"
    MsgBox(0,"",$aTest1[1][0])

    [/autoit]

    Es könnte also sein, dass diese beide Zeilen Fehler anstelle der Anzahl zurückliefern:

    [autoit]


    $iAnzCol = _GUICtrlListView_GetColumnCount($hLvw_Info)
    $iAnzahl = _GUICtrlListView_GetItemCount($hLvw_Info)

    [/autoit]
  • Da bin ich ja gerade passend zuhause angekommen :)

    Zweimal weil ich beides vorher mal getrennt hatte also eine Funktion für Textexport und einmal für Mail,
    Altlasten die für nen test drin geblieben sind.
    Die Fehlermeldung zielte dann auf eine Zeilennummer ab die nicht in meiner Macht liegt >10000 :)
    Vermutlich durch inrgendein Include.


    Die Größe ist denke ich mit 99 schon angemessen momentan sind es im Schnitte ~20 Einträge.
    Je Datenbank können es +7 werden. Ich denke da ist erst einmal Luft.

    Im Script gab es auch keinen Fehler n der Exe dann wohl allerdings war es auch ein X64 Sys, das sollte aber keine Einfluss haben da als X86 kompiliert
    Und die Architektur wird für Regread auch angepasst.

    Werde das mal probieren das sieht am harmonischten aus :)

    [autoit]

    Local $as_Body = _Listview_2_Array("Mail")

    [/autoit]

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • [autoit]

    $iAnzCol = _GUICtrlListView_GetColumnCount($hLvw_Info)
    $iAnzahl = _GUICtrlListView_GetItemCount($hLvw_Info)

    [/autoit]


    Auch die werde ich mal im Auge behalten.

    Besten Dank und mal schauen was er da nun macht.

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Ein Fehler dürfte es zum Beispiel immer geben wenn das Listview leer ist, was durchaus durch fehlerhafte regreads entstehen kann, kA wie du das Listview befüllst.
    Was die Größe angeht... sie ist nicht angemessen, da sie entweder zu groß oder im schlimmsten Fall zu klein ist. Besser wäre es dieses _asBody Array genau wie $array anhand der benötigten Zeilen des Listviews zu dimensionieren.