Funktionreferenz


_DebugArrayDisplay

Beschreibung anzeigen in

Zeigt ein 1D oder 2D Array in einem ListView um das Debuggen zu unterstützen

#include <Debug.au3>
_DebugArrayDisplay ( Const ByRef $aArray [, $sTitle = "DebugArray" [, $sArrayRange = "" [, $iFlags = 0 [, $vUser_Separator = Default [, $sHeader = Default [, $iDesired_Colwidth = Default [, $hUser_Function = ""]]]]]]] )

Parameter

$aArray Name des anzuzeigenden Arrays
$sTitle [optional] Titel für den Dialog. Standard = "DebugArray"
$sArrayRange [optional] Bereich der darzustellenden Zeilen/Spalten. Standard ("") = komplettes Array (siehe unten für Details)
$iFlags [optional] legt die UDF Optionen fest. Benötigte Werte sind zu addieren
    $ARRAYDISPLAY_COLALIGNLEFT (0) = (Standard) Ausrichtung Spaltentext - links
    $ARRAYDISPLAY_TRANSPOSE (1) = transponiert das Array (Zeilen und Spalten tauschen) (nur 2D)
    $ARRAYDISPLAY_COLALIGNRIGHT (2) = Ausrichtung Spaltentext - rechts
    $ARRAYDISPLAY_COLALIGNCENTER (4) = Ausrichtung Spaltentext - mittig
    $ARRAYDISPLAY_VERBOSE (8) = erweitert - zeigt bei einem Fehler eine MsgBox bzw. Splashscreens während große Arrays verarbeitet werden
    $ARRAYDISPLAY_NOROW (64) = Keine Spalte mit "Row" anzeigen
$vUser_Separator [optional] setzt die Spalten-Anzeige-Option während Daten in die Zwischenablage kopiert werden
    Zeichen = Trennzeichen zwischen den Spalten
    Zahl = feste Spaltenbreite - längere Items werden abgeschnitten
    Standard = aktuelles Trennzeichen (gewöhnlich "|").
$sHeader [optional] Spaltennamen (Namen getrennt durch das aktuelle Trennzeichen - gewöhnlich "|"). Standard siehe Bemerkungen.
$iDesired_Colwidth [optional] Wenn positiv, maximale Breite, auf die eine ListView-Spalte erweitert wird, um den Inhalt anzuzeigen. Standard = 350 Pixel.
    Wenn negativ, werden alle Spalten, außer der ersten, die auf 55 gesetzt ist, auf Abs($iDesired_Colwidth) gesetzt.
$hUser_Function [optional] Eine Variable die mit der Benutzerfunktion verknüpft ist. Standard = keine. Siehe Bemerkungen.

Rückgabewert

Erfolg: 1
Fehler: 0 und setzt @error wie folgt:
@error: 1 - $aArray ist kein Array
2 - $aArray hat zu viele Dimensionen. Es werden nur 1D und 2D Arrays unterstützt
3 - @error wird gesetzt, wenn die Funktion aufgerufen wird, ein _DebugReport()

Bemerkungen

Falls der Funktion kein Array als Variable oder ein Array mit mehr als zwei Dimensionen übergeben wird, so gibt die Funktion einen Fehler zurück und das Skript wird fortgesetzt.
Falls der "verbose" Parameter in $iFlags gesetzt wird, so wird eine MsgBox dargestellt, welche die Möglichkeit bietet das Skript sofort zu beenden oder das Skript mit der Rückgabe des normalen Fehlercodes weiterzuführen.

Obwohl die Größe des Arrays, das angezeigt werden soll, nicht begrenzt ist, gibt es eine Windows-Controlbeschränkung, was bedeutet, dass der ListView-Header und -Spalten nicht ausgerichtet sind, wenn mehr als etwa 600 vorhanden sind.

Es werden nur 65525 Zeilen eines Arrays dargestellt. Die ist in AutoIt eine Begrenzung der Gesamtzahl von in einer GUI darstellbarer Controls. Außerdem können maximal 250 Spalten dargestellt werden.
Wenn der User versucht ein Array größer als diese Begrenzungen darzustellen, so wird diesen Begrenzungen ein "*" an die abgeschnittene Dimension angehängt und in rot dargestellt.
Es ist zu beachten, dass die Verwendung von $iArrayRange (anzuzeigende Elemente bestimmen) es ermöglicht Arrays größer als die Anzeigebegrenzungen darzustellen.

Der $sArrayRange Parameter-Syntax lautet wie folgt:

"7" - zeigt die Zeilen 0-7 mit allen Spalten
"7:" - zeigt die Zeilen die auf 7 enden mit allen Spalten
"|7" - zeigt alle Zeilen mit den Spalten 0-7
"|7:" - zeigt alle Zeilen mit den Spalten die auf 7 enden
"7|7" - zeigt die Zeilen 0-7 mit den Spalten 0-7
"5:7" - zeigt die Zeilen 5-7 mit allen Spalten
"|5:7" - zeigt alle Zeilen mit den Spalten 5-7
"7|5:7" - zeigt die Zeilen 0-7 mit den Spalten 5-7
"5:7|7" - zeigt die Zeilen 5-7 mit den Spalten 0-7
"5:7|5:7" - zeigt die Zeilen 5-7 mit den Spalten 5-7

Alle Spaltenwerte werden für 1D-Arrays ignoriert.

$sHeader Namen (getrennt durch das aktuelle Trennzeichen) werden für die vielen Spalten verwendet wie es Namen gibt. Wenn keine oder nicht genug eigene Namen festgelegt werden, so wird der Standardname von "Row|Col0" für 1D-Arrays oder "Row|Col0|Col1|...|Col n" für 2D-Arrays ausgetauscht. Wenn das Array transponiert angezeigt wird, wird der Header ignoriert.
Die Variable $ARRAYDISPLAY_ROWPREFIX kann den Präfix für die Zeilennummerierung geändert werden (Standard: #).
Um den Zahlenvergleich für eine bestimmte Spalte zu erzwingen, ich einfach der entsprechende Namen mit $ARRAYDISPLAY_NUMERICSORT (Standard: *) zu beenden.

Die 4 Buttons unten bei dem Dialog haben folgende Funktionen:
Die Array-Dimensionen werden links unter dem Array angezeigt. Sie sind in rotem Text, wenn das Array transponiert ist oder nur eine Reihe von Elementen angezeigt wird - ein Tooltip zeigt das / die jeweilige(n) Ereignis(e) an.

Falls der "verbose" Parameter in $iFlags gesetzt ist, so wird ein Splashdialog dargestellt während das Array versucht ein Array mit mehr als 10000 Elementen darzustellen.

Ein Arrayelement, das ein anderes Array oder Map enthält, wird als {Array} oder {Map} angezeigt.

Bei der Verwendung von $ARRAYDISPLAY_TRANSPOSE oder $sArrayRange wird eine Kopie von $aArray erstellt, wodurch zusätzlicher Speicher verbraucht wird.

Ein Klick auf den Spalten-Header sortiert dieses. Bei einer großen Anzahl von Zeilen kann dies einige Sekunden dauern. Beim Laden wird ein ToolTip angezeigt, der darauf hinweist, dass die Sortierung einige Sekunden dauern kann.

$hUser_Function muss so erstellt werden, dass es 2 (und nur 2) Parameter akzeptiert (siehe das Beispiel):
    Param1 ist das anzuzeigende $aArray
    Param2 ist ein 1D-Array der Indizes der ausgewählten Zeilen mit einer Zählung im Element [0].
Diese Parameter können dann innerhalb der Benutzerfunktion wie gewünscht verwendet werden.

Beispiel

#include <Debug.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    ; Erstellt ein 1D Array zum anzeigen
    Local $aArray_1D[5] = ["Item 0", "Item 1", "Ein breites Item 2 um die Spaltenanpassung zu zeigen", "Item 3", "Item 4"]

    _DebugArrayDisplay($aArray_1D, "1D Anzeige")

    ; Erstellt ein 2D Array zum anzeigen
    Local $aArray_2D[25][15]
    For $i = 0 To UBound($aArray_2D) - 1
        For $j = 0 To UBound($aArray_2D, 2) - 1
            $aArray_2D[$i][$j] = "Item " & StringFormat("%02i", $i) & StringFormat("%02i", $j)
        Next
    Next

    _DebugArrayDisplay($aArray_2D, "2D Anzeige")

    $aArray_2D[5][5] = "Ein breites Item um die Spaltenanpassung zu zeigen"
    _DebugArrayDisplay($aArray_2D, "Angepasste Spalte - eigene Spaltennamens - keine Buttons oder Spalte mit 'Row'", Default, 32 + 64, Default, "AA|BB|CC|DD|EE|FF|GG|HH|II|JJ")

    ; Verbindet die User-Funktion mit einer Variable um diese als Parameter zu übergeben
    Local $hUserFunction = _UserFunc

    $aArray_2D[5][5] = "rechtsbündige Spaltenausrichtung"
    _DebugArrayDisplay($aArray_2D, "Bereich gesetzt - rechtsbündig - Spaltenbreite kopieren - Benutzerfunktion", "3:7|4:9", 2, 15, "AA|BB|CC|DD|EE|FF", Default, $hUserFunction)
    _DebugArrayDisplay($aArray_2D, "Bereich gesetzt - vertauscht", "3:7|4:9", 1, Default, "AA|BB|CC|DD|EE|FF") ; Es ist zu beachten, dass die Spaltennamen nicht getauscht werden

    $aArray_2D[5][5] = "Spaltenausrichtung wird auf linksbündig gesetzt"
    Opt("GUIDataSeparatorChar", "!")
    _DebugArrayDisplay($aArray_2D, "! Trennzeichen der Überschrift", "3:7|4:9", Default, Default, "AA!BB!CC!DD!EE!FF")

    ; Erstellt eine nicht-Array Variable um einen Fehler zu erzwingen - eine MsgBox wird angezeigt, da $iFlags gesetzt ist
    Local $vVar = 0, $iRet, $iError
    $iRet = _DebugArrayDisplay($vVar, "Keine MsgBox bei einem Fehler")
    $iError = @error
    MsgBox(0, "_DebugArrayDisplay() Fehler", "Rückgabe ohne interne Msgbox $iret =" & $iRet & " @error=" & $iError)

    $iRet = _DebugArrayDisplay($vVar, "MsgBox bei einem Fehler", Default, 8)
    $iError = @error
    MsgBox(0, "_DebugArrayDisplay() Fehler", "Rückgabe der internen Msgbox ohne das Beenden zu erzwingen $iret =" & $iRet & " @error=" & $iError)

EndFunc   ;==>Example

; Es ist zu beachten, dass die Benutzerfunktion 2 Parameter haben muss, auch wenn man nicht vorhat beide zu verwenden
Func _UserFunc($aArray_2D, $aSelected)

    ; Falls kein Parameter verwendet werden soll, sollte die folgende Zeile eingefügt werden, damit Au3Check keine Warnung ausgibt
    #forceref $aArray_2D

    _DebugArrayDisplay($aSelected, "Ausgewählte Spalten")

EndFunc   ;==>_UserFunc