_Print() - Ausgabe in die SciTE-Konsole wie in Lua: print()

    • 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

    EDIT: Korrektur Ausgabefehler, wenn STR nach NUM folgt.

  • BugFix

    Feine Sache !

    Frage :

    Ausgabe bei For $i = 0 To 3 :

    Code
    $a,$b,$c,$d,$e       123     456     789     111     222
    $a,$b,$c,$d,$e      1230    4560    7890    1110    2220
    $a,$b,$c,$d,$e     12300   45600   78900   11100   22200
    $a,$b,$c,$d,$e    123000  456000  789000  111000  222000

    Ausgabe bei For $i = 0 To 4 :

    Code
    $a,$b,$c,$d,$e       123     456     789     111     222
    $a,$b,$c,$d,$e      1230    4560    7890    1110    2220
    $a,$b,$c,$d,$e     12300   45600   78900   11100   22200
    $a,$b,$c,$d,$e    123000  456000  789000  111000  222000
    $a,$b,$c,$d,$e       1230000     4560000     7890000     1110000     2220000

    Setze ich $iMinSpace = 10 dann sieht es wie folgt aus :

    Code
    $a,$b,$c,$d,$e                    123          456          789          111          222
    $a,$b,$c,$d,$e                    1230          4560          7890          1110          2220
    $a,$b,$c,$d,$e                    12300          45600          78900          11100          22200
    $a,$b,$c,$d,$e                    123000          456000          789000          111000          222000
    $a,$b,$c,$d,$e                    1230000          4560000          7890000          1110000          2220000

    Das hängt wohl mit den TAB-Positionen zusammen, oder habe ich da was falsch verstanden ?

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    • Offizieller Beitrag

    Das hängt wohl mit den TAB-Positionen zusammen, oder habe ich da was falsch verstanden ?

    Korrekt, MinSpace ist der Abstand zwischen letztem Zeichen Wert_1 und erstem Zeichen Wert_2 (wobei das erste Zeichen des Folgewertes ein Leerzeichen ist, wenn ein nummerischer Wert folgt). Die Tabpositionen dienen der Ausrichtung, MinSpace ist für die "Luft zwischen den Werten zuständig, kann man normalerweise bei 2 oder 1 belassen.

  • Du hast noch einen kleinen Fehler drin... denn hinter einer Zahl wird kein Leerzeichen ($iMinSpace = 2) eingefügt, wenn der darauf folgende Parameter ein String ist.

    Bsp:

    Wobei ich generell die Ausgabe lieber selbst formatiere, weil sie nur dann genau so ist, wie ich sie haben will...

    Code
    For $i = 1 To $aWinList[0][0] Step 1
        If $aWinList[$i][0] Then
            $aPos = WinGetPos($aWinList[$i][1])
            If $aPos[2] + $aPos[3] > 2 Then
                ConsoleWrite(StringFormat('X, Y, W, H, Title  %6i, %6i, %6i, %6i, %s\n', $aPos[0], $aPos[1], $aPos[2], $aPos[3], $aWinList[$i][0]))
            EndIf
        EndIf
    Next
    ; X, Y, W, H, Title         0,      0,    136,     60, Mouse without Borders Helper
    ; .....................................................^
    • Offizieller Beitrag

    Du hast noch einen kleinen Fehler drin... denn hinter einer Zahl wird kein Leerzeichen ($iMinSpace = 2) eingefügt, wenn der darauf folgende Parameter ein String ist.

    Stimmt, korrigiere ich gleich mal.

    Wobei ich generell die Ausgabe lieber selbst formatiere, weil sie nur dann genau so ist, wie ich sie haben will...

    Das stimmt natürlich. Gerade bei einem Mix von Ausgaben unterschiedlicher Längen ist eine exakte Formatierung sinnvoll.

    Mir ging es hauptsächlich um Debugging von nummerischen Werten (z.B. Fenster-/Ctrl-Positionen) die bei ähnlicher Größenordnung in Schleifenausgabe auch ordentlich lesbar sind.