- Offizieller Beitrag
Ihr kennt es bestimmt auch: z.B. beim Debuggen möchte man sich im Schleifendurchlauf mehrere Werte nebeneinander anzeigen lassen. Schön wäre es natürlich, wenn diese Werte dann auch immer genau übereinander, also in Tabellenform ausgegeben werden.
Genau das ermöglicht die Funktion _LenGroupedOutput.
Der Einsatz beschränkt sich natürlich nicht nur auf die Konsolenausgabe. Überall, wo mit fixen Stringlängen gearbeitet werden soll ist es recht nützlich.
So gehts:
- Parameter $sLen -- legt die Stringlänge für die übergebenen Werte fest.
Dabei gilt:
'-ANZAHL' -- Alle Werte bekommen die Länge ANZAHL
'ANZAHL_1,ANZAHL_2, ..ANZAHL_n' -- Länge für Element 'n' ; bei Ausrichtung Links nur bis n-1 erforderlich (Angabe bis vorletztes Element)
- Parameter $charFill -- Zeichen, das zum Auffüllen verwendet werden soll
- Parameter $iAlign -- Ausrichtung: 0=Links, 1=Rechts
- Parameter $var_1 .._10 -- Die zu gruppierenden Werte
Und so sieht es dann z.B. aus:
Spoiler anzeigen
Ausrichtung: Links, Länge für jeden Wert übergeben:
9951......385...60..2686....2044....865
1832......354...24..1047....794.....3253
4157......566...9...4958....2032....732
8108......644...60..3358....4092....1619
9218......322...40..6387....1660....9286
2037......960...78..4019....6150....5656
4731......803...47..6326....4297....6075
2964......436...29..2917....8831....9078
Ausrichtung: Rechts, eine Länge gültig für alle Werte:
....9198.....704......22....1643....2147....4672
....4295.....562......57....1170....4806....6894
....1823......16......26....8112....7126....6141
....6806.....916......53....7885....6703....1689
....1586.....995.......6.....730....5141....7381
....5959.....421......25....4287.....806....5501
....7686.....854......56....2991....7314....4110
....1821.....428......28....5727....6935....6916
Alles anzeigen
_LenGroupedOutput(v0.1)
ConsoleWrite('Ausrichtung: Links, Länge für jeden Wert übergeben:' & @CRLF)
For $i = 1 To 8
ConsoleWrite(_LenGroupedOutput('10,6,4,8,8,8', '.', 0, Random(10,10000,1),Random(10,1000,1),Random(1,100,1),Random(10,10000,1),Random(10,10000,1),Random(10,10000,1)) & @CRLF)
Next
ConsoleWrite(@CRLF & 'Ausrichtung: Rechts, eine Länge gültig für alle Werte:' & @CRLF)
For $i = 1 To 8
ConsoleWrite(_LenGroupedOutput('-8', '.', 1, Random(10,10000,1),Random(10,1000,1),Random(1,100,1),Random(10,10000,1),Random(10,10000,1),Random(10,10000,1)) & @CRLF)
Next
;===============================================================================
; Function Name....: _LenGroupedOutput
; Description......: Längengruppierten Ausgabestring aus bis zu 10 Werten erzeugen
; Parameter(s).....: $sLen Festlegen der Stringlänge der übergebenen Werte
; '-ANZAHL' das Minus gibt an: ANZAHL gilt für ALLE übergebenen Werte
; 'ANZAHL_1,ANZAHL_2,..ANZAHL_n' ANZAHL_n für Element 'n' ; bei $iAlign=0: n-1 (bis vorletztes Element)
; $charFill Zeichen, das zum Auffüllen verwendet werden soll
; $iAlign '0'= LeftAlign, '1'= RightAlign
; $var_1 .._10 Bis zu 10 Werte, die gruppiert werden sollen
; Return Value(s)..: Erfolg Der gruppierte String
; Fehler @error 1 - $sLen nicht für alle Elemente übergeben
; @error 2 - $charFill ist Leerstring oder zu lang
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _LenGroupedOutput($sLen, $charFill, $iAlign, $var_1, $var_2, $var_3='-0', $var_4='-0', $var_5='-0', $var_6='-0', $var_7='-0', $var_8='-0', $var_9='-0', $var_10='-0')
Local $aVar[9], $index = 0, $aLen, $sFill = '', $sOut = ''
If $iAlign <> 1 Then $iAlign = 0
If StringLen($charFill) <> 1 Then Return SetError(2,0,0)
For $i = 1 To 30
$sFill &= $charFill
Next
For $i = 1 To 10
If Eval('var_' & $i) <> '-0' Then
$aVar[$i-1] = Eval('var_' & $i)
$index = $i -1
Else
ExitLoop
EndIf
Next
If StringLeft($sLen, 1) = '-' Then
$aLen = StringSplit(StringTrimLeft($sLen, 1), ',', 2)
ReDim $aLen[$index+1]
For $i = 1 To $index
$aLen[$i] = $aLen[0]
Next
Else
$aLen = StringSplit($sLen, ',', 2)
If UBound($aLen) < $index Then Return SetError(1,0,0)
EndIf
For $i = 0 To $index
If $iAlign = 0 Then
If $i = $index Then ExitLoop
$sOut &= StringLeft($aVar[$i] & $sFill, $aLen[$i])
Else
$sOut &= StringRight($sFill & $aVar[$i], $aLen[$i])
EndIf
Next
If $iAlign = 0 Then $sOut &= $aVar[$index]
Return $sOut
EndFunc ;==>_LenGroupedOutput