Heute habe ich gelernt, dass ich nicht perl -c filename
passende geschweifte Klammern {} in beliebigen Dateien finden kann, nicht unbedingt in Perl-Skripten. Das Problem ist, dass es mit anderen Arten von Klammern () [] und vielleicht <> nicht funktioniert. Ich hatte auch Experimente mit verschiedenen Vim-Plugins, die angeblich helfen sollen, nicht passende Klammern zu finden, die aber bisher nicht so gut waren.
Ich habe eine Textdatei mit einigen Klammern, von denen eine fehlt! Gibt es ein Programm / Skript / Vim-Plugin / irgendetwas, das mir helfen kann, die nicht passende Klammer zu identifizieren?
quelle
Update 2:
Das folgende Skript druckt jetzt die Zeilennummer und die Spalte einer falsch zugeordneten Klammer aus . Er verarbeitet eine Haltewinkelart pro Abtastung (dh. ‚[]‘ ‚<>‘ ‚{}‘ ‚()‘ ...)
Das Skript identifiziert die erste , nicht angepasste rechte Klammer oder die ersten einer un-paarige linken Klammer ... Beim Erkennen eines Fehlers werden die Zeilen- und Spaltennummern angezeigt
Hier ist eine Beispielausgabe ...
Hier ist das Skript ...
quelle
Line, Column (8, 10)
egal welche Datei ich anprobieren. Wird auchmogXCt=${#mogX}
gesetzt aber nirgends benutzt.Die beste Möglichkeit ist vim / gvim wie Shadur identifiziert, aber wenn Sie ein Skript möchten, können Sie überprüfen , meine Antwort auf eine ähnliche Frage auf Stack - Überlauf . Ich wiederhole hier meine ganze Antwort:
Wenn das, was Sie versuchen, auf eine allgemeine Sprache zutrifft, ist dies ein nicht triviales Problem.
Zunächst müssen Sie sich um Kommentare und Zeichenfolgen kümmern. Wenn Sie dies in einer Programmiersprache überprüfen möchten, die reguläre Ausdrücke verwendet, wird dies Ihre Suche erneut erschweren.
Bevor ich Sie zu Ihrer Frage beraten kann, muss ich die Grenzen Ihres Problembereichs kennen. Wenn Sie garantieren können, dass es keine Zeichenfolgen, keine Kommentare und keine regulären Ausdrücke gibt, über die Sie sich Sorgen machen müssen, oder generell nirgendwo im Code, wo Klammern möglicherweise anders als für die Zwecke verwendet werden können, für die Sie überprüfen, ob sie ausgeglichen sind, wird dies der Fall sein das leben viel einfacher machen.
Es wäre hilfreich zu wissen, welche Sprache Sie überprüfen möchten.
Wenn ich die Hypothese annehme, dass es kein Rauschen gibt, dh dass alle Klammern nützliche Klammern sind, wäre meine Strategie iterativ:
Ich würde einfach alle inneren Klammerpaare suchen und entfernen: diejenigen, die keine Klammern enthalten. Dies geschieht am besten, indem Sie alle Zeilen zu einer einzigen langen Zeile zusammenfassen (und einen Mechanismus zum Hinzufügen von Zeilenreferenzen finden, falls Sie diese Informationen benötigen). In diesem Fall ist das Suchen und Ersetzen ziemlich einfach:
Es erfordert ein Array:
Und eine Schleife durch diese Elemente:
Meine Testdatei lautet wie folgt:
Mein vollständiges Skript (ohne Zeilenbezug) lautet wie folgt:
Die Ausgabe dieses Skripts stoppt bei der innersten illegalen Verwendung von Klammern. Aber Vorsicht: 1 / Dieses Skript funktioniert nicht mit eckigen Klammern in Kommentaren, regulären Ausdrücken oder Zeichenfolgen. 2 / Es meldet nicht, wo sich das Problem in der Originaldatei befindet. 3 / Obwohl alle ausgeglichenen Paare entfernt werden, die es im Innersten stoppt Fehlerbedingungen und behält alle englischen Klammern.
Punkt 3 / ist wahrscheinlich ein verwertbares Ergebnis, obwohl ich mir nicht sicher bin, welchen Berichtsmechanismus Sie im Sinn hatten.
Punkt 2 / ist relativ einfach zu implementieren, benötigt jedoch mehr als ein paar Minuten Arbeit, sodass ich es Ihnen überlassen werde, dies herauszufinden.
Punkt 1 / ist schwierig, weil Sie einen völlig neuen Bereich konkurrierender, manchmal verschachtelter Anfänge und Enden oder spezieller Anführungsregeln für Sonderzeichen betreten ...
quelle