So, jetzt geht es ans Eingemachte.
Folgendes habe ich nicht hinbekommen. Zwar ist das Ergebnis wie gewünscht, aber das heißt nicht, dass die RegExp stimmt. Man kennt das ja, in Tests funktionierts, in einer realen Umgebung nicht mehr. (Außerdem habe ich mehr geraten als kapiert.)
Bevor die folgende RegExp benutzt wird, ist die Test-Datei schon wie folgt bereinigt:
- Block-Kommentare wurden entfernt.
- Zeilen-Kommentare wurden entfernt.
- Zusammengehörende Zeilen mit Fortsetzungzeichen wurden zu 1 Zeile ohne Fortsetzungzeichen zusammengefügt.
Erreicht werden soll:
Eine au3 Datei wird in eine Variable geladen und nach der oben genannten Bereinigung sollen nur Zeilen mit Funktions-Köpfen erhalten bleiben, alle anderen Zeilen sollen weg.
- Dabei sollen nur Zeilen mit gültigen/kompletten Funktions-Köpfen behalten werden, angefangene Funktionen wie z. B. "Func A", sollen NICHT gefunden werden, es sollte mindestens "Func A()" in der Zeile stehen.
- Zeilen, bei denen hinter der ")" außer evtl. Whitespace (unerlaubterweise*) ein oder mehrere Zeichen stehen, sollen entfernt werden. *"unerlaubterweise" heißt, dass das syntaktisch falsch ist. Deshalb sollen diese Zeilen ja entfernt werden.
Ein Demo-Script packe ich in den Anhang. Ebenso eine Test-Datei, weil sie auch Whitespace am Zeilenende enthält und ich nicht weiß, ob das mit der Forensoftware erhalten bliebe. Deshalb bitte auch die Testdatei NUR mit einem Editor öffnen, der die training white space NICHT entfernt.
Hier eine Kurzform der Test-Datei. Ob die Whitespace noch drin sind, kann ich nicht sagen.
; Test-Funktion, zum Testen absichtlich vom linken Rand eingerückt, 2020-06-23.
func Bla( $a, const $x, Const $f, byreF $g, Byref $yVar,$_epsi="=(;constance bYreF", _ ; " (
$c = 0,$Dori = '=',$delta='=(', _
$b='()', $i= 1, $j =2, $_sMyDelim_1= '"',$_sMy_Delim_2 ="'") ; blubb) a
; ... Func Dummy(weitere Anweisungen)
endfunc
; Hinter diesem FuncHead ist ein echtes Tab-Zeichen.
Func Bla2()
MsgBox(0, "", "Hello")
EndFunc
Func Bla3()
MsgBox(0, "", "Hello")
EndFunc
func IchBinUnfertig_1
func IchBinUnfertig_2(
func IchBinUnfertig_3 )
func IchBinUnfertig_4()
func IchBinUnfertig_5 (
func IchBinUnfertig_6_UndSollteNichtErfasstWerden() - unzulaessiger Text
Alles anzeigen
Das Ergebnis sollte dann ungefähr so aussehen.
Was ich bisher gebastelt habe, sieht so aus.
Original-Code von Malkey, 2017-11-30.
Local Const $sFuncTag = "Func " ; Schlagwort zur Erkennung eines Funktions-Kopfes.
$sAllLines = StringRegExpReplace($sAllLines, '(?m)^\h*(?i)(\Q' & $sFuncTag & '\E)\h*\w+\h*\(.*\)(?!\h*\S+?)\R?(*SKIP)(*F)|^.*\R?', "")
Wie sollte die RegExp aussehen, damit nicht zu viel und nicht zu wenig entfernt wird?
Bernd.
Edit: Demo-Script in Anhang hochgeladen.