#cs ----------------------------------------------------------------------------

  AutoIt Version: 3.3.14.5

  Beispiel-Code von Kanashius in meinem Thread im AutoIt.de-Forum

    "Compiler Output-Zeilen ermitteln und bearbeiten - Vorschläge und Meinungen?"


  Quelle: (AutoIt.de, Posting #2, 2019-10-29.)

    https://autoit.de/thread/86684-compiler-output-zeilen-ermitteln-und-bearbeiten-vorschl%C3%A4ge-und-meinungen/?postID=697258#post697258


  Kanashius:
  ----------

  Ich hab das ganze jetzt mal mit einem regulären ausdruck erledigt:

    Professor Bernd: (siehe unten stehenden Code).

  Einmal wird gesucht und der Dateiname, die Zeile und Spalte sowie der Typ
  in ein Array gespeichert und dann wird auch mit nem StringRegExpReplace
  die Zeile ersetzt, so wie du sie haben möchtest :)

  Ausgabe:

    "D:\test files\FileQuantityLimit (Testdatei).au3"(112,16) : warning: $iTest possibly not declared/created yet
        FOUND: D:\test files\FileQuantityLimit (Testdatei).au3 -> (112,16) -> warning
        "D:\test files\FileQuantityLimit (Testdatei).au3" (112,16): warning: $iTest possibly not declared/created yet
    "D:\test files\FileQuantityLimit (Testdatei).au3"(131,11) : error: zzzz(): undefined function.
        FOUND: D:\test files\FileQuantityLimit (Testdatei).au3 -> (131,11) -> error
        "D:\test files\FileQuantityLimit (Testdatei).au3" (131,11): error: zzzz(): undefined function.
    "D:\test files\FileQuantityLimit (Testdatei).au3" (163) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
        FOUND: D:\test files\FileQuantityLimit (Testdatei).au3 -> (163) -> ==>
        "D:\test files\FileQuantityLimit (Testdatei).au3" (163,1): ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

  Wobei die for Schleife mit $j nicht notwendig sein sollte und stattdessen nen

    ConsoleWrite(@TAB&"FOUND: "&$arResult[0]&" -> "&$arResult[1]&" -> "&$arResult[2]&@crlf)

  ausreichen sollte :)

  MfG Kanashius

#ce ----------------------------------------------------------------------------

#include <Array.au3>

Global $sTestData = '"D:\test files\FileQuantityLimit (Testdatei).au3"(112,16) : warning: $iTest possibly not declared/created yet' & @CRLF & _
                    '"D:\test files\FileQuantityLimit (Testdatei).au3"(131,11) : error: zzzz(): undefined function.' & @CRLF & _
                    '"D:\test files\FileQuantityLimit (Testdatei).au3" (163) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:'

; Global $sTestData = 'ConsoleWrite("D:\test files\FileQuantityLimit (333,14) error warning TestFile.au3")' & @CRLF & _
;                     '"D:\test files\FileQuantityLimit (Testdatei).au3"(131,11) : error: zzzz(): undefined function.' & @CRLF & _
;                     '"D:\test files\FileQuantityLimit (Testdatei).au3" (163) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:'

Global $sPattern = '(?i)(?:\"(.*?\.au3)\"[ ]*(\(\d+,\d+\)|\(\d+\))[ ]*:[ ]*(warning|error|\=\=\>)(?::[ ]*)?)'
Global $sPatternReplace = '(?i)(?s)(?:\"(.*?\.au3)\"[ ]*(\(\d+,\d+|\(\d+(?=.*(\,1)))\)[ ]*:[ ]*(warning:|error:|\=\=\>)(?:[ ]*)?)(.*),1'
; Global $sReplace = '"$1" $2$3): $4 $5'        ; <== Original Pattern.
Global $sReplace = '"$1"$2$3) : error: $4 $5' ; <== Geändertes Pattern.

; $sTestData in einzelne Zeilen splitten.
Global $arData = StringSplit($sTestData, @CRLF, 1 + 2)

; Array anzeigen. Es besteht aus den obigen unveränderten 3 Zeilen.
_ArrayDisplay($arData)

ConsoleWrite(@CRLF) ; Nur eine Leerzeile, um die Ausgabe zu gruppieren.

for $i = 0 to UBound($arData) - 1 step 1

    ConsoleWrite("Original Line: " & $arData[$i] & @CRLF)

    ; Mit SRE nach Pattern suchen und gefundene Teil-Strings in Array speichern.
    $arResult = StringRegExp($arData[$i], $sPattern, 3)

    ; Array mit gefundenen Teil-Strings anzeigen. Es besteht aus:
    ; - dem Dateipfad "D:\test files\FileQuantityLimit (Testdatei).au3",
    ; - dem Zahlenteil inkl. runde Klammern, z. B. (112,16) oder (163),
    ; - dem Fehlertyp "warning", "error", "==>" (= Laufzeitfehler).
    _ArrayDisplay($arResult)

;     for $j = 0 to UBound($arResult) - 1 step 3
;         ConsoleWrite(@TAB & "FOUND: " & $arResult[$j] & " -> " & $arResult[$j + 1] & " -> " & $arResult[$j + 2] & @CRLF)
;     Next

    ; Gefundene Teil-Strings ausgeben.
    ConsoleWrite(@TAB & "FOUND: " & $arResult[0] & " -> " & $arResult[1] & " -> " & $arResult[2] & @CRLF)

    ; Ersetzen ???
    $sResult = StringRegExpReplace($arData[$i] & ",1", $sPatternReplace, $sReplace)
    ConsoleWrite(@TAB & "Replaced Line: " & $sResult & @CRLF & @CRLF) ; Zusätzliche Leerzeile, um die Ausgabe zu gruppieren.
next

