Array oder non-Array - das ist hier die Frage

  • Guten Morgen,

    ich wollte eine Auswertung des freien Speicherplatzes bei uns in der Firma machen. Dazu benutze ich dieses Script:

    Spoiler anzeigen
    [autoit]

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

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

    Dim $pcname[1] = ["pcname"]
    Global $log = @ScriptDir & "\log_HDD-Partition.csv"
    _FileCreate($log)
    Sleep(1500)
    FileOpen($log, 1)
    FileWrite($log, "PC" & ";" & "Freier Speicher C:" & @CRLF)
    For $z = 0 To UBound($pcname) - 1
    If FileExists("\\" & $pcname[$z] & "\d$\partitionen.ini") Then
    Local $hdd = "\\" & $pcname[$z] & "\d$\partitionen.ini"
    Dim $ahdd
    _FileReadToArray($hdd, $ahdd)
    For $j = 0 to 1
    _ArrayDelete($ahdd, $j)
    Next

    For $y = 0 To UBound($ahdd) - 1
    $ahddfrei = StringSplit($ahdd[$y], 'frei:', 1)
    $isarray = IsArray($ahddfrei)
    if $isarray <1 then ExitLoop
    For $i = 1 To 2
    _ArrayDelete($ahddfrei, 0)
    Next
    ;_ArrayDisplay($ahddfrei)
    FileWrite($log, $pcname[$z] & ";" & $ahddfrei[$y] & @CRLF)
    Next
    EndIf
    Next
    FileClose($log)

    [/autoit]


    Dazu sei gesagt, dass in den .ini's die Partitionen drinnenstehen, ich aber nur die Größe von c: brauche. So steht es in der .ini drin:

    Spoiler anzeigen

    C:, NTFS, 125,5 GB, frei: 97,4 GB
    D:, NTFS, 23,5 GB, frei: 21,9 GB

    Das Script funktioniert soweit einwandfrei, bricht aber dann nachdem ca. 1/4 des PC's abgearbeitet wurden, ab. Die Fehlermeldung besagt: Subscript used with non-Array variable.
    Wundern tut mich das, dass er echt am Anfagn einwandfrei läuft. Habe dann da die Abfrage mit "ob Array, oder nicht?" eingebaut, aber irgendwie funktioniert das nicht wie es oll :pinch:

  • In welcher Zeile tritt denn der Fehler auf?
    Testweise würde ich mal nach Zeile 14 folgendes schreiben:

    [autoit]


    If not isArray($ahhd) Then MsgBox(0,"Kein Array",$ahhd)

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Hi!


    ungetestet:

    Spoiler anzeigen
    [autoit]

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

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

    Dim $pcname[1] = ["pcname"]
    Global $log = @ScriptDir & "\log_HDD-Partition.csv"
    If _FileCreate($log) Then
    Local $Path, $ahdd, $ahddfrei
    Local $File_Open = FileOpen($log, 1)
    FileWrite($File_Open, "PC" & ";" & "Freier Speicher C:" & @CRLF)
    For $z = 0 To UBound($pcname) - 1
    $Path = "\\" & $pcname[$z] & "\d$\partitionen.ini"
    If FileExists($Path) Then
    _FileReadToArray($Path, $ahdd)
    For $y = 1 To $ahdd[0]
    $ahddfrei = StringSplit($ahdd[$y], 'frei:', 2)
    If IsArray($ahddfrei) Then
    ;For $i = 1 To 2
    ; _ArrayDelete($ahddfrei, 0)
    ;Next
    For $For In $ahddfrei
    FileWrite($log, $pcname[$z] & ";" & $For & @CRLF)
    Next
    EndIf
    ;_ArrayDisplay($ahddfrei)
    Next
    EndIf
    Next
    FileClose($log)
    EndIf

    [/autoit]

    Lg Kleiner