Hallo Leute. Ich wollte die Funktion _GUICtrlListView_AddArray() verwenden, wie ich es schon häufiger getan habe. In meinem jetztigen Script meckert aber AutoIt, dass in Line 476 ein Fehler gefunden wurde. "Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded.". Das sagt er für das Skript "GUIListView.au3". Das Array um das es geht, hat weniger als 30 Einträge. Was kann das sein? Hier mein Script:
C
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <GuiStatusBar.au3>
#include <GUIConstantsEx.au3>
#include <ScreenCapture.au3>
#include <File.au3>
#include <GUIListView.au3>
Global $datei_pfad
Global $adatei_eingelesen
Global $aalle_dateien_in_pfad
dim $arechenearray[1]
Global $rechenvariable
Global $qoutientenzaehler
Global $durchschnittswert
Global $minimalwert = 999 ;dummywert für die Vergleichsroutine. Ansonsten würde beim Vergleich nichts in die Variable geschrieben werden können
Global $maximalwert = 0 ; hier dasselbe wie bei $minimalwert
#Region ### START Koda GUI section ### Form=C:\Users\ihangebr\Desktop\AutoIt\Durchschnittswerte\durchschnittswerte.kxf
$Form1 = GUICreate("Form1", 601, 367, 434, 232)
$statusbar_unten = _GUICtrlStatusBar_Create($Form1)
$btn_pfad_waehlen = GUICtrlCreateButton("Pfad wählen", 8, 8, 155, 33)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$label_durchschn_aetzzeit = GUICtrlCreateLabel("Durchschnittliche Ätzzeit:", 8, 96, 149, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$label_min_aetzzeit = GUICtrlCreateLabel("Minimale Ätzzeit:", 8, 120, 99, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$label_max_aetzzeit = GUICtrlCreateLabel("Maximale Ätzzeit:", 8, 144, 102, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$btn_werte_berechnen = GUICtrlCreateButton("Werte berechnen", 8, 48, 155, 33)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$label_wert_durchschn_aetzzeit = GUICtrlCreateLabel("keine Daten", 168, 96, 62, 17)
$label_wert_min_aetzzeit = GUICtrlCreateLabel("keine Daten", 168, 120, 62, 17)
$label_wert_max_aetzzeit = GUICtrlCreateLabel("keine Daten", 168, 144, 62, 17)
$label_eingelesener_pfad = GUICtrlCreateLabel("Eingelesener Pfad:", 8, 296, 111, 17)
GUICtrlSetFont(-1, 9, 800, 0, "MS Sans Serif")
$label_wert_eingelesener_pfad = GUICtrlCreateLabel("Kein Pfad gewählt", 120, 296, 469, 17)
$list_verarbeitete_dateien = GUICtrlCreateListView("", 272, 32, 313, 253)
$label_verarbeitete_dateien = GUICtrlCreateLabel("Verarbeitete Dateien", 272, 8, 101, 17)
$label_angemeldeter_benutzer = GUICtrlCreateLabel("Angemeldeter Benutzer:", 8, 320, 139, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$label_wert_angemeldeter_benutzer = GUICtrlCreateLabel("-/-", 160, 320, 150, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUICtrlSetData($label_wert_angemeldeter_benutzer, @UserName)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $btn_werte_berechnen
_werte_berechnen()
Case $btn_pfad_waehlen
_pfad_waehlen()
EndSwitch
WEnd
Func _werte_berechnen()
_listview_update() ; löscht den vorherigen inhalt aus dem listview
$aalle_dateien_in_pfad = _FileListToArray($datei_pfad) ;liest alle Dateien aus dem Pfad in ein Array ein
for $i = 1 to UBound($aalle_dateien_in_pfad) - 1 ; sofern bei 0 angefangen wird zu zählen, kommt es zu einem Fehler!!!
Local $filter_avi = StringInStr($aalle_dateien_in_pfad[$i], "avi", 0, 1, StringLen($aalle_dateien_in_pfad[$i]) - 3) ;sucht in dem aktuellen String nach "avi" und . avi-Dateien sollen nicht verarbeitet werden, daher ist diese Info wichtig
Local $filter_db = StringInStr($aalle_dateien_in_pfad[$i], "db", 0, 1, StringLen($aalle_dateien_in_pfad[$i]) - 2) ;für thumb.db
If $filter_avi < 1 and $filter_db < 1 Then ; wird nur ausgeführt, sofern diese Datei keine .avi und keine .db ist
$adatei_eingelesen = FileReadToArray($datei_pfad & "\" & $aalle_dateien_in_pfad[$i]) ;liest die Textdatei in das Array
Local $aetzwert = StringLeft($adatei_eingelesen[UBound($adatei_eingelesen) - 1], 3) ;extrahiert den Ätzwert aus der letzten Zeile der eingelesenen Datei
$rechenvariable = $rechenvariable + $aetzwert
$qoutientenzaehler = $qoutientenzaehler + 1
$arechenearray[UBound($arechenearray) - 1] = $aetzwert ;schreit die Ätzwerte in das Rechenarray
ReDim $arechenearray[UBound($arechenearray) + 1]
;~ GUICtrlCreateListViewItem($aalle_dateien_in_pfad[$i], $list_verarbeitete_dateien)
EndIf
Next
_ArrayDelete($arechenearray, UBound($arechenearray) - 1) ; löscht den letzten Arrayeintrag (der = 0 ist) damit die Minimalwertberechnung vernünftig abgearbeitet werden kann
For $i = 0 to UBound($arechenearray) - 1
;Minimalwert
if $arechenearray[$i] < $minimalwert Then
$minimalwert = $arechenearray[$i]
EndIf
;Maximalwert
If $arechenearray[$i] > $maximalwert Then
$maximalwert = $arechenearray[$i]
EndIf
Next
; Durchschnittswert
$durchschnittswert = Round($rechenvariable / $qoutientenzaehler, 2)
_label_aktualisieren()
;~ MsgBox(1,"durchschnittswert", $durchschnittswert)
;~ MsgBox(1,"minimalwert", $tmp_min_wert)
;~ MsgBox(1,"maximalwert", $tmp_max_wert)
$durchschnittswert = 0
$minimalwert = 999 ;standarddummywerte
$maximalwert = 0
$qoutientenzaehler = 0 ;Setzt den Qoutientenzähle auf 0 zurück
$rechenvariable = 0 ;setzt die Rechenvariable nach jedem Rechenvorgang wieder auf 0 zurück
ReDim $arechenearray[1] ; setzt das rechenarray nach jeder Berechnung wieder zurück
EndFunc
Func _pfad_waehlen() ; Mit dieser Funktion, wird der Ordner manuell geladen, der gelesen werden soll und wo die Durchschnittswerte der Ätzzeiten in den Dateien berechnet werden sollen
Local Const $sMessage = "Ordner zum Einlesen wählen"
Local $gewaehlter_ordner = FileSelectFolder($sMessage, "")
If @error Then
MsgBox(1, "Kein Ordner ausgewählt", "Kein Ordner gewählt, Durchschnittswerte werden nicht berechnet!")
Else
$datei_pfad = $gewaehlter_ordner
;~ MsgBox(1,1, $datei_pfad)
EndIf
GUICtrlSetData($label_wert_eingelesener_pfad, $datei_pfad)
EndFunc ;==>Example
Func _label_aktualisieren()
GUICtrlSetData($label_wert_durchschn_aetzzeit, $durchschnittswert & " Sek.")
GUICtrlSetData($label_wert_min_aetzzeit, $minimalwert & " Sek.")
GUICtrlSetData($label_wert_max_aetzzeit, $maximalwert & " Sek.")
EndFunc
Func _listview_update() ; updated das LisView wenn Änderungen am Array und damit dem ListView vorgenommen wurden
;~ _ArrayDisplay($aalle_dateien_in_pfad)
_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($list_verarbeitete_dateien))
_GUICtrlListView_AddArray($list_verarbeitete_dateien, $arechenearray)
EndFunc
Alles anzeigen