- Offizieller Beitrag
Zum Debuggen ist es ganz praktisch, wenn man eine (beliebige) Anzahl Parameter halbwegs geordnet am Stück ausgeben kann. In Lua gibt es die Funktion print(param_1, param_2, .. param_n). Das ist praktisch, da man z.B. bei der Prüfung von Funktionen einfach die kpl. Parameterliste im Funktionskopf kopiert, in print() einmal in Gänsefüßchen einfasst, dann ein Komma und dann das ganze in Parameterform nochmal - fertig ist die Debugzeile.
In AutoIt müssen wir da etwas mühsam die Variablen verketten.
Ich habe das print() aus Lua mal in AutoIt nachempfunden für bis zu 20 Parameter. Die Ausgabe erfolgt ausgerichtet an den TAB-Positionen. Text wird links ausgerichtet, Zahlenwerte rechts. Es wird dazu die SciTE-Einstellung für die TAB-Weite ausgelesen, kann ja individuell variieren. Für den Mindestabstand von zwei ausgegebenen Werten gibt es eine Konstante $iMinSpace (vorbelegt mit 2). Wer mag, kann das für sich anpassen (Da es eine Konstante ist, erfolgt aber nicht extra eine Gültigkeitsprüfung - kleiner 1 ist sinnfrei). Der Platz zwischen zwei Werten ist immer mindestens $iMinSpace breit. Ist diese Position keine TAB-Position, wird bis zum folgenden TAB erweitert.
Wenn ich jetzt mit _Print() sich ändernde Zahlenwerte in einer Schleife ausgeben lasse, sind die Ausgaben schön geordnet ohne viel Aufwand.
_Print
$a = 123
$b = 456
$c = 789
$d = 111
$e = 222
For $i = 0 To 3
_Print('$a,$b,$c,$d,$e',$a*10^$i,$b*10^$i,$c*10^$i,$d*10^$i,$e*10^$i)
Next
; #FUNCTION# ====================================================================================================================
; Name ..........: _Print
; Description ...: Ausgabe von bis zu 20 Werten in die Konsole, ausgerichtet an den TAB-Positionen.
; Textwerte werden links, Zahlen rechts an der TAB-Position ausgerichtet.
; Syntax ........: Print($0[, $1 = Null[, $2 = Null[, $3 = Null[, $4 = Null[, $5 = Null[, $6 = Null[, $7 = Null[,
; $8 = Null[, $9 = Null[, $10 = Null[, $11 = Null[, $12 = Null[, $13 = Null[, $14 = Null[, $15 = Null[,
; $16 = Null[, $17 = Null[, $18 = Null[, $19 = Null]]]]]]]]]]]]]]]]]]])
; Parameters ....: $0 - Erster auszugebender Wert.
; $1 - [optional] zweiter
; ... bis
; $19 - [optional] zwanzigster Wert.
; Return values .: None
; Note ..........: Der Mindestabstand zwischen zwei Werten ist 2 Zeichen und kann bei Bedarf über die Konstante $iMinSpace angepasst werden.
; Author ........: BugFix
; ===============================================================================================================================
Func _Print($0, $1=Null, $2=Null, $3=Null, $4=Null, $5=Null, $6=Null, $7=Null, $8=Null, $9=Null, $10=Null, $11=Null, $12=Null, $13=Null, $14=Null, $15=Null, $16=Null, $17=Null, $18=Null, $19=Null)
Local Const $sPathUser = @UserProfileDir & '\AppData\Local\AutoIt v3\SciTE\SciTEUser.properties'
Local Const $sPathGlobal = StringLeft(@AutoItExe, StringInStr(@AutoItExe, '\', 1, -1)) & '\SciTE\SciTEGlobal.properties'
Local Const $iMinSpace = 2 ;-- Mindestabstand zwischen zwei Werten
Local Static $iSize = Null, $sSpaces = ' '
Local $sRead, $aResult
If $iSize = Null Then
$sRead = FileRead($sPathUser)
$aResult = StringRegExp($sRead, '(?m)^tabsize=(\d)', 1)
If Not IsArray($aResult) Then
$sRead = FileRead($sPathGlobal)
$aResult = StringRegExp($sRead, '(?m)^tabsize=(\d)', 1)
If Not IsArray($aResult) Then
$iSize = 4
Else
$iSize = $aResult[0]
EndIf
Else
$iSize = $aResult[0]
EndIf
EndIf
Local $aP[] = [$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19]
Local $iLen, $iPos, $iIdx, $iLenTab, $iSpace, $sOut, $TypeLast = 'str'
For $i = 0 To 19
If $aP[$i] = Null Then ExitLoop
$iLen = StringLen($aP[$i])
$iPos = $iLen + $iMinSpace ;-- Länge und Abstand zum nächsten Wert
$iIdx = Ceiling($iPos/$iSize) ;-- der nächste TAB
$iLenTab = $iIdx*$iSize ;-- Länge mit nächster TAB-Position
$iSpace = $iLenTab - $iLen ;-- Leerzeichen zum Auffüllen
If IsString($aP[$i]) Then ;-- String linksbündig ausgeben
If $TypeLast = 'num' Then $sOut &= StringLeft($sSpaces, $iSize)
$sOut &= $aP[$i] & StringLeft($sSpaces, $iSpace)
$TypeLast = 'str'
Else
$sOut &= StringLeft($sSpaces, $iSpace) & $aP[$i]
$TypeLast = 'num'
EndIf
Next
ConsoleWrite($sOut & @CRLF)
EndFunc ;==>_Print
Alles anzeigen
EDIT: Korrektur Ausgabefehler, wenn STR nach NUM folgt.