Formatieren von Text welches aus einem Array übernommen wird

  • Hallo zusammen,

    vielleicht hat ja jemand von den hier anwesenden 'Profis' eine Idee bzw. einen Ansatz.
    Ich habe ein RoboCopy Log File, welches nach dem Erstellen die Summary in einer Messagebox darstellen soll.
    Das Script dazu funktioniert soweit.

    Problem ist jetzt allerdings noch die Formatierung der Ausgabe (s.u.).
    Das sieht ganz mies aus.

    Daher meine Frage: Wie kann ich das Format beibiegen (ala Tabstopps im Word z.B.)


    [autoit]

    #include
    #include
    Dim $CountLines, $Last10Lines, $aRecords, $aNewRecords$file = FileOpen("c:\bkp.log", 0)
    ; Check if file opened for reading OKIf $file = -1 Then MsgBox(0, "Error", "Unable to open file.") ExitEndIf
    ; File Actions (read 6th line for date purposes + trim, count lines of log and calculate 10 lines up)$line = FileReadLine($file,6)$line = StringTrimLeft($line,12) If @error = -1 Then Exit$CountLines = _FileCountLines("c:\bkp.log")$Last10Lines = $CountLines - 10FileClose($file)
    ;Array Actions (read log to array, create new array containing the last 11 lines)Local $aNewRecords[1]
    If Not _FileReadToArray("c:\bkp.log", $aRecords) Then MsgBox(4096, "Fehler", "Fehler beim einlesen der Datei in das Array Fehler:" & @error) ExitEndIfFor $x = $Last10Lines To $aRecords[0] _ArrayAdd($aNewRecords,StringStripWS($aRecords[$x], 3))Next
    ;Show Action (show summary messagebox)MsgBox(0, "Summary: Bkp.log - " & $line, _ArrayToString($aNewRecords, @CRLF, 1, 11))

    [/autoit]


    mfg
    ugt100

  • nachdem die Formatierung eines Textes in einer Messagebox nicht sonderlich möglich ist
    empfehle ich eine eigene Gui basteln für die Ausgabe.

    Darin die Ausgabe _GUICtrlRichEdit_Create Control anzeigen.

    Formatierungsmöglichkeiten gibt es darin ausreichend...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hi Schnuffel,

    danke für den Tip.
    Daran habe ich auch schon gedacht, ist allerdingshalt deutlich mehr Aufwand.

    Aber wenn es denn man so ist ....

    Werdemich dran machen

    Danke

    Gruss
    ugt100

  • Du könntest auch mal das Logfile auszugsweise posten. Sollte eigentlich auch in einer msgbox recht simpel darstellbar sein, solange es nicht zuviele Einträge sind. Zur Formatierung innerhalb einer msgbox kannst du die Makros @CRLF (Zeilenumbruch) und @TAB (Tabulator) nutzen.
    Dazu liest du das Logfile am besten per _filereadtoarray() ein und wandelst das ganze dann in einer Schleife in einen formatierten String duch einfügen der genannten Steuerzeichen.

    Beispiel für eine so formatierte msgbox:

    [autoit]


    $string = "zeile 1 spalte 1" & @TAB & "zeile 1 spalte 2" & @TAB & "zeile 1 spalte 3" & @CRLF & _
    "zeile 2 spalte 1" & @TAB & "zeile 2 spalte 2" & @TAB & "zeile 2 spalte 3" & @CRLF & _
    "zeile 3 spalte 1" & @TAB & "zeile 3 spalte 2" & @TAB & "zeile 3 spalte 3" & @CRLF
    msgbox(0,"",$string)

    [/autoit]

    Grunsätzlich stimme ich aber zu, dass eine msgbox schlecht für eine strukturierte Ausgabe geeignet ist. Besser wäre wohl eine GUI mit listview wenn du eine Tabellenform bevorzugst.

  • Haool Misterspeed,

    das Log ist nur das Summary des Robocopy Durchlaufs ... und sieht so aus:


    Total Copied Skipped Mismatch FAILED Extras
    Dirs : 3631 1192 2439 0 0 17
    Files : 23590 2529 21060 0 1 125
    Bytes : 15.226 g 1.514 g 13.712 g 0 0 2.73 m
    Times : 0:06:01 0:04:41 0:00:04 0:01:16

    Speed : 5783924 Bytes/sec.
    Speed : 330.958 MegaBytes/min.

    Ended : Mon Aug 15 10:51:46 2011

    Wenn Du Dir das mal in einer MsgBox anzeigen lässt oder in Winword, wirst Du sehen wie 'verschoben' das (leider).
    Ich werde mal sehen ob, das mit den Tab's funktioniert. Muss halt vorher die störenden Leerzeichen entfernen und durch jeweils ein Tab ersetzen.

    Danke schon mal für den Tip

    Gruss
    ugt100

  • Hab dir mal was gebastelt, das zumindestens mit deinem Beispiellog funktioniert (sofern keine nicht sichtbaren Formatierungszeichen im original drin sind...):

    [autoit]


    #include <file.au3>
    #include <array.au3>

    [/autoit][autoit][/autoit][autoit]

    Global $file=@ScriptDir & "\test.log"
    Global $afile
    Global $sResult = @TAB

    [/autoit][autoit][/autoit][autoit]

    _FileReadToArray($file,$afile)
    ;_ArrayDisplay($afile)

    [/autoit][autoit][/autoit][autoit]

    for $i=1 to $afile[0]
    $afile[$i]=StringReplace($afile[$i]," :",":")
    if $i=4 Then
    $afile[$i]=StringReplace($afile[$i]," g","g",0,1)
    $afile[$i]=StringReplace($afile[$i]," m","m",0,1)
    EndIf
    if $i < 6 then $afile[$i]=StringReplace($afile[$i]," ",@TAB)
    if $i >=6 Then $afile[$i]=StringReplace($afile[$i],": ",":" & @TAB)
    $sResult &= $afile[$i] & @CRLF
    Next
    ;_ArrayDisplay($afile)
    MsgBox(0,"result",$sResult)

    [/autoit]
    • Offizieller Beitrag

    Wenn du eine saubere Darstellung erreichen möchtest, darfst du keinesfalls TrueType-Fonts in der Anzeige verwenden.
    Nutze Monospaced-Schriftarten, wie Courier oder Letter Gothic. Dadurch, dass hier die Laufweite für jeden Buchstaben identisch ist, kannst du per Wortlänge und Leerzeichenausgleich deine Anzeigen exakt positionieren.