StripComment (entfernt Kommentare aus au3-Sourcecode)

    • Offizieller Beitrag

    r1fLeX hatte sich ja schonmal daran versucht. Da war aber das RegExp-Pattern nicht ausreichend.
    Ich habe das jetzt mal erweitert auf (hoffentlich) alle Kommentar-Möglichkeiten:

    Das Script:

    [autoit]


    $sFilename = FileOpenDialog('Bitte Datei auswählen...', @ScriptDir, 'AutoIt-Source (*.au3)')
    If Not @error Then
    $sFile = FileRead($sFilename) ; Sourcecode einlesen
    $sNew = StringRegExpReplace($sFile, '((\x22|\x27).*(\x22|\x27))|(;.*)|(#cs|#comments-start)(.*\r\n)(.*\r\n)*(#ce|#comments-end)(.*\r\n)', '\1') ; Kommentare entfernen
    $sNew = StringRegExpReplace($sNew, '([^\r])\n', '\1' & @CRLF) ; weil einige CRLF durch das Pattern zu LF wurden, das Zeilenende wieder korrigieren
    $sNew = StringRegExpReplace($sNew, '(\r\n)+', '\1') ; doppelte Zeilenenden in einfache umwandeln
    $sFilename = StringReplace($sFilename, '.au3', '_StripComment.au3') ; Dateinamen für die neue Datei anpassen
    $hFile = FileOpen($sFilename, 2) ; neue Datei zum speichern öffnen
    FileWrite($hFile, $sNew) ; Daten schreiben
    FileClose($hFile) ; Datei schließen
    EndIf

    [/autoit]

    Beispieldatei vor dem bearbeiten:

    Spoiler anzeigen
    [autoit]


    For $i = 0 To 100 Step 10 ;Der Kommentar soll weg
    For $j = 0 To 10
    ;~ GUICtrlCreateLabel('', 16 + $i * 3.8, 180, 20, 16)
    GUICtrlCreateLabel('', 16 + $i * 3.8, 180, 20, 16)
    Next
    Next

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

    ; Test mit "
    Global $test = "ein Semikolon ; innerhalb von Anführungsstrichen darf nicht entfernt werden" ; das hier hinten schon

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

    ; Test mit '
    Global $test = 'ein Semikolon ; innerhalb von Anführungsstrichen darf nicht entfernt werden' ; das hier hinten schon
    #cs
    Das hier ist nur ein zusätzlicher Kommentar

    zum testen, ob auch cs...ce entfernt wird

    blablabla

    #ce

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

    #comments-start
    cs und ce gibt es ja auch noch ausgeschrieben
    #comments-end

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

    While True;das ist ein Kommentar ohne Leerzeichen vor und nach dem Semikolon
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $hClose
    Exit
    EndSwitch
    WEnd;und das auch

    [/autoit]

    Beispieldatei nach dem bearbeiten:

    Spoiler anzeigen
    [autoit]


    For $i = 0 To 100 Step 10
    For $j = 0 To 10
    GUICtrlCreateLabel('', 16 + $i * 3.8, 180, 20, 16)
    Next
    Next
    Global $test = "ein Semikolon ; innerhalb von Anführungsstrichen darf nicht entfernt werden"
    Global $test = 'ein Semikolon ; innerhalb von Anführungsstrichen darf nicht entfernt werden'
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $hClose
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Gibt es da noch irgendeinen Fall, den ich übersehen habe?

    @Xeno: Das RegExpReplace kannst Du vor der Erkennung einsetzen, dann sind die Kommentare weg und es werden nur die "richtigen" Befehle erkannt.

  • Danke es funktioniert einfach wunderbar^^
    und so viel leichter als des CleanScript von Pee und Markus...^^ (obwohl des auch super ist)
    das teil hier läuft schnell und zuverlässig

    Padmak

  • r1fLeX hatte sich ja schonmal daran versucht. Da war aber das RegExp-Pattern nicht ausreichend.
    Ich habe das jetzt mal erweitert auf (hoffentlich) alle Kommentar-Möglichkeiten:

    was meinst du warum er das hier geschrieben hat?

    Padmak

  • ich glaub das war eine zweideutige anspielung
    er meinte halt "Strip" damit und du "Strip" :D:D:D:D
    Der eine denkt versaut und der andere net^^

    Padmak