UDF > Debug >


_DebugArrayDisplay

Affiche un tableau 1D ou 2D dans une ListView pour aider le débogage

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

Paramètres

$aArray Tableau à afficher
$sTitle [optionnel] Titre de la boîte de dialogue. Par défaut, "DebugArray".
$sArrayRange [optionnel] Plage de lignes/colonnes à afficher. Par défaut, "" pour tableau entier. (Voir ci-dessous pour plus de détails)
$iFlags [optionnel] Détermine les options. Ajoutez ensemble les valeurs choisies:
    $ARRAYDISPLAY_COLALIGNLEFT (0) = (par défaut) Alignement du texte des colonnes à gauchet
    $ARRAYDISPLAY_TRANSPOSE (1) = Transpose le tableau (2D seulement)
    $ARRAYDISPLAY_COLALIGNRIGHT (2) = Alignement du texte des colonnes à droite
    $ARRAYDISPLAY_COLALIGNCENTER (4) = Alignement du texte des colonnes au centre
    $ARRAYDISPLAY_VERBOSE (8) = Verbeux - Affiche une MsgBox sur une erreur et fait surgir des écrans pendant le traitement de tableaux importants
    $ARRAYDISPLAY_NOROW (64) = Pas de colonne 'Row' affichée
$vUser_Separator [optionnel] Définit les options d'affichage des colonnes lors de la copie de donnée dans le presse-papier.
    Caractère = Séparateur des colonnes.
    Nombre = Largeur des colonnes fixes - les éléments plus longs seront tronqués.
    Par défaut = Caractère de séparation en vigueur (généralement "|").
$sHeader [optionnel] Noms des colonnes en entête (chaîne des noms séparés par le caractère de séparation en vigueur - généralement "|"). Par défaut, voir Remarques.
$iMax_Colwidth [optionnel] Largeur maximale avec laquelle les colonnes le ListView se développent pour montrer leur contenu. Par défaut = 350 pixels.
$hUser_Function [optionnel] Une variable assignée avec une fonction définnie par l'utilisateur à exécuter. Par défaut, aucune. Voir Remarques.

Valeur de retour

Succès: Retourne 1
Échec: Retourne 0 and définit @error comme suit:
@error: 1 - $aArray n'est pas un tableau
2 - $aArray a trop de dimensions (seulement 1D et 2D sont supportés)

Remarques

Si la fonction reçoit une variable qui n'est pas un tableau ou un tableau de plus de 2 dimensions, la fonction retourne une erreur et le script continue. Si le paramètre "verbose" est défini dans $iFlags, une boîte de dialogue MsgBox s'affichera pour vous permettre de quitter le script immédiatement ou de continuer le script avec le retour d'erreur normal.

Bien qu'il n'y ait pas de limites sur la taille du tableau à afficher, il existe une limitation sur les contrôles Windows qui fait que les en-têtes et colonnes d'un ListView ne s'alignent pas s'il y en a plus de 600 environ.

La syntaxe du paramètre $sArrayRange est celle qui suit:

"7" Montre les lignes 0-7 avec toutes les colonnes
"7:" Montre les lignes de la 7 jusqu'à la dernière avec toutes les colonnes
"|7" Montre toutes les lignes avec les colonnes 0-7
"|7:" Montre toutes les lignes avec les colonnes de la 7 à la dernière
"7|7" Montre toutes les lignes 0-7 avec les colonnes 0-7
"5:7" Montre toutes les lignes 5-7 avec toutes les colonnes
"|5:7" Montre toutes les lignes avec les colonnes 5-7
"7|5:7" Montre les lignes 0-7 avec les colonnes 5-7
"5:7|7" Montre les lignes 5-7 avec les colonnes 0-7
"5:7|5:7" Montre les lignes 5-7 avec les colonnes 5-7

Toutes les valeurs de colonne sont ignorées pour les tableaux 1D.

Les noms $sHeader (séparés par le caractère séparateur en vigueur) seront utilisés pour autant de colonnes qu'il y a de noms. Si aucune, ou pas assez, les noms personnalisés sont spécifiés puis les en-têtes par défaut de "Row|Col0" pour les tableaux 1D ou "Row|Col0|Col1|...|Col n" pour les 2D sont substitués. Si le tableau est affiché transposé, les en-têtes sont ignorés.

Les 4 boutons en bas de la boîte de dialogue ont les fonctions suivantes:
Copy Data & Hdr/Row Copie le tableau ou la/les lignes sélectionnées dans le presse-papiers en ajoutant l'en-tête complet et l'identification de ligne.
Copy Data Only Copie le tableau ou le/les lgnes sélectionnées dans le presse-papier avec aucun en-tête ou identification de ligne.
Run User Func Exécute la fonction définie par l'utilisateur passée dans $sUser_Function. Cette fonction est entièrement distincte de l'UDF et doit être créée et codée par l'utilisateur pour accepter 2 (et seulement 2) paramètres qui seront fournis par l'UDF elle-même: le tableau complet étant affiché et un tableau 1D contenant les index des lignes sélectionnées avec un compte dans l'élément [0]. Ces paramètres peuvent ensuite être utilisés dans la fonction utilisateur si nécessaire. Le bouton n'est pas affiché si aucune fonction n'est spécifiée.
Exit script Quitte le script immédiatement.

Les dimensions du tableau sont affichées en bas à gauche. Ils sont en texte rouge si le tableau est transposé ou seulement une plage d'éléments est affichée - une info-bulle affiche la/les occurrences particulières.

Si le paramètre "verbose" est défini dans $iFlags, une boîte de dialogue splash s'affiche lors du traitement initial lorsque le tableau à afficher contient plus de 10000 éléments. Une boîte de dialogue similaire est affichée lorsque le bouton "Copy Data" est utilisé sur un affichage de plus de 10000 éléments - si cela est susceptible de se produire, une "Fonction Utilisateur" doit être utilisée pour stocker le tableau pour un traitement ultérieur.

Un élément de tableau contenant un autre tableau est affiché comme {Array}.

Cliquez sur l'en-tête d'une colonne pour la trier.

Exemple

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

Example()

Func Example()

    ; Crée un tableau 1D à afficher
    Local $aArray_1D[5] = ["Item 0", "Item 1", "Un élément 2 plus long pour montrer l'élargissement de la colonne", "Item 3", "Item 4"]

    _DebugArrayDisplay($aArray_1D, "1D display")

    ; Crée un tableau 2D à afficher
    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 display")

    $aArray_2D[5][5] = "Un élément plus long pour montrer l'élargissement de la colonne"
    _DebugArrayDisplay($aArray_2D, "Colonne élargie - Titres perso - pas de boutons ou de colonne 'Row'", Default, 32 + 64, Default, "AA|BB|CC|DD|EE|FF|GG|HH|II|JJ")

    ; Assigne une fonction utilisateur à une variable pour la passer en paramètre
    Local $hUserFunction = _UserFunc

    $aArray_2D[5][5] = "Alignement de la colonne défini à droite"
    _DebugArrayDisplay($aArray_2D, "Définit plage - aligne à droite - copie largeur colonne - fonction utilisateur", "3:7|4:9", 2, 15, "AA|BB|CC|DD|EE|FF", Default, $hUserFunction)
    _DebugArrayDisplay($aArray_2D, "Définit plage - transposé", "3:7|4:9", 1, Default, "AA|BB|CC|DD|EE|FF") ; Notez qu'il n'y a pas de nom de colonnes dans le transposé

    $aArray_2D[5][5] = "Alignement de colonne défini à gauche"
    Opt("GUIDataSeparatorChar", "!")
    _DebugArrayDisplay($aArray_2D, "! Séparateur d'en-tête", "3:7|4:9", Default, Default, "AA!BB!CC!DD!EE!FF")

    ; Crée une variable qui n'est pas un tableau pour provoquer une erreur - MsgBox est affiché suivant $iFlags
    Local $vVar = 0, $iRet, $iError
    $iRet = _DebugArrayDisplay($vVar, "Pas de MsgBox sur Erreur")
    $iError = @error
    MsgBox(0, "_DebugArrayDisplay() Erreur", "Retour sans Msgbox $iret =" & $iRet & " @error=" & $iError)

    $iRet = _DebugArrayDisplay($vVar, "MsgBox sur Erreur", Default, 8)
    $iError = @error
    MsgBox(0, "_DebugArrayDisplay() Erreur", "Retour avec Msgbox sans forcer l'arrêt $iret =" & $iRet & " @error=" & $iError)

EndFunc    ;==>Example

; Notez que la fonction utilisateur DOIT AVOIR DEUX paramètres même si vous ne souhaitez pas les utiliser tous les deux

Func _UserFunc($aArray_2D, $aSelected)
    ; Mais si un paramètre n'est pas utilisé faire ceci pour éviter un avertissement de Au3Check
    #forceref $aArray_2D

    _DebugArrayDisplay($aSelected, "Selected cols")
EndFunc    ;==>_UserFunc