Text-Datei nach Zeilen durchsuchen die mehr oder weniger als eine offene Klammer "(" und eine geschlossene Klammer ")" haben
Hallo erstmal an alle die sich meiner Frage widmen.
Ich habe einen langen Code den ich in eine Text-Datei kopiert habe.
In jeder Zeile sollte eine offene Klammer "(" und eine geschlossene Klammer ")" stehen.
Da mir aber mein Programm jetzt sagt das da entweder eine Klammer zu viel oder zu wenig ist und ich keine Lust habe ca. 800 Zeilen per Hand abzuarbeiten, würde ich gerne wissen wie man das per Batch machen könnte.
Die Batch sollte eine Beispiel.txt durchsuchen in welcher Zeile sich entweder weniger als eine offene Klammer "(" und eine geschlossene Klammer ")" oder mehr als eine offene Klammer "(" und eine geschlossene Klammer ")" gibt und mir dann eine Rückmeldung gibt in der mir die Zeilennummer angezeigt wird.
Ich bedanke mich im voraus für jede Antwort
Mfg
Melmacker
Ich habe einen langen Code den ich in eine Text-Datei kopiert habe.
In jeder Zeile sollte eine offene Klammer "(" und eine geschlossene Klammer ")" stehen.
Da mir aber mein Programm jetzt sagt das da entweder eine Klammer zu viel oder zu wenig ist und ich keine Lust habe ca. 800 Zeilen per Hand abzuarbeiten, würde ich gerne wissen wie man das per Batch machen könnte.
Die Batch sollte eine Beispiel.txt durchsuchen in welcher Zeile sich entweder weniger als eine offene Klammer "(" und eine geschlossene Klammer ")" oder mehr als eine offene Klammer "(" und eine geschlossene Klammer ")" gibt und mir dann eine Rückmeldung gibt in der mir die Zeilennummer angezeigt wird.
Ich bedanke mich im voraus für jede Antwort
Mfg
Melmacker
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 391751
Url: https://administrator.de/forum/text-datei-nach-zeilen-durchsuchen-die-mehr-oder-weniger-als-eine-offene-klammer-und-eine-geschlossene-391751.html
Ausgedruckt am: 17.04.2025 um 09:04 Uhr
11 Kommentare
Neuester Kommentar
Moin,
Dann mit der Powershell als Einzeiler:
Wobei Du, falls Du das mehrmals auf derselben Shell ausführen willst, vorher ein $count=0 absetzen musst.
Oder als kleines Skript:
<edit> Ich habe den regex nochmal korrigiert, so dass auch auf innere Klammern geprüft wird.</edit>
hth
Erik
Zitat von @Melmacker:
In jeder Zeile sollte nur am Anfang eine offene Klammer "(" und am Ende eine geschlossene Klammer ")" stehen.
In jeder Zeile sollte nur am Anfang eine offene Klammer "(" und am Ende eine geschlossene Klammer ")" stehen.
Dann mit der Powershell als Einzeiler:
get-content .\klammern.txt -encoding utf8 | %{$count++; if(-not ($_ -match "^\({1,1}[^\(\)]*\){1,1}$")) {write-host "Die Zeile $count ist nicht ok"}}
Wobei Du, falls Du das mehrmals auf derselben Shell ausführen willst, vorher ein $count=0 absetzen musst.
Oder als kleines Skript:
$arr_lines = get-content .\klammern.txt -encoding utf8
foreach($line in $arr_lines) {
if(-not ($line -match "^\({1,1}[^\(\)]*\){1,1}$")) {
write-host "Die Zeile" $( [array]::IndexOf($arr_lines, $line)) "ist nicht ok"
}
}
<edit> Ich habe den regex nochmal korrigiert, so dass auch auf innere Klammern geprüft wird.</edit>
hth
Erik

Zitat von @Melmacker:
In jeder Zeile sollte nur am Anfang eine offene Klammer "(" und am Ende eine geschlossene Klammer ")" stehen.
Auch mit Batch kein ProblemIn jeder Zeile sollte nur am Anfang eine offene Klammer "(" und am Ende eine geschlossene Klammer ")" stehen.
findstr /ivn "^([^()]*)$" "d:\test.txt"
Moin,
Wenn der Text so aussieht:
funktioniert das bei mir so wie gewünscht. Welche Fehlermeldung bekommst du denn?
Liebe Grüße
Erik
Zitat von @Melmacker:
Ich habe mich mit Powershell noch nicht befasst.
Bei mir sehen die Zeilen so aus (x steht für ein Wort und y für eine Zahl/Buchstabe).
(setvar "x" y)
Und davon habe ich ca. 800 Zeilen.
Der oben stehende Code funktioniert bei mir nicht weil er setvar als Befehl in Powershell einließt.
Ich habe mich mit Powershell noch nicht befasst.
Bei mir sehen die Zeilen so aus (x steht für ein Wort und y für eine Zahl/Buchstabe).
(setvar "x" y)
Und davon habe ich ca. 800 Zeilen.
Der oben stehende Code funktioniert bei mir nicht weil er setvar als Befehl in Powershell einließt.
Wenn der Text so aussieht:
(setvar "x" y)
(setvar "x" y
setvar "x" y)
setvar "x" y
(setvar ("x" y)
(setvar "x") y)
(setvar ("x") y)
funktioniert das bei mir so wie gewünscht. Welche Fehlermeldung bekommst du denn?
Liebe Grüße
Erik

Und mit der Powershell reicht auch das hier:
Select-String 'D:\test.txt' -Pattern '^\([^()]*\)$' -NotMatch | select -Expand LineNumber

Kein Thema. 