Aujourd'hui, j'ai appris que je pouvais utiliser perl -c filename
pour trouver des accolades {} incomparables dans des fichiers arbitraires, pas nécessairement des scripts Perl. Le problème est que cela ne fonctionne pas avec d'autres types de crochets () [] et peut-être <>. J'ai également eu des expériences avec plusieurs plugins Vim qui prétendent aider à trouver des brackets incomparables, mais pas très bons jusqu'à présent.
J'ai un fichier texte avec pas mal de crochets et l'un d'entre eux manque! Existe-t-il un programme / script / plug-in vim / quoi que ce soit qui puisse m'aider à identifier le support inégalé?
la source
Mise à jour 2:
le script suivant affiche maintenant le numéro de ligne et la colonne d'un crochet mal placé . Il traite un type de support par scan ( par exemple. « [] » « <> » « {} » « () » ...)
Le script identifie le premier , support droit sans égal , ou la première d'un crochet gauche jumelé non ... lors de la détection d'un erroe, il se termine par les numéros de ligne et de colonne
Voici un exemple de sortie ...
Voici le script ...
la source
Line, Column (8, 10)
quel que soit le fichier sur lequel je l’essaie. ÉgalementmogXCt=${#mogX}
est défini mais pas utilisé n'importe où.La meilleure option est vim / gvim, telle qu'identifiée par Shadur, mais si vous voulez un script, vous pouvez vérifier ma réponse à une question similaire sur Stack Overflow . Je répète toute ma réponse ici:
Si ce que vous essayez de faire s’applique à un langage généraliste, il s’agit là d’un problème non trivial.
Pour commencer, vous devrez vous soucier des commentaires et des chaînes. Si vous voulez vérifier ceci sur un langage de programmation qui utilise des expressions régulières, cela rendra votre quête encore plus difficile.
Donc, avant que je puisse entrer et vous donner un conseil sur votre question, je dois connaître les limites de votre zone de problème. Si vous pouvez vous assurer qu'il n'y a pas de chaînes, pas de commentaires et pas d'expressions régulières à craindre - ou plus génériquement nulle part dans le code, les crochets ne peuvent éventuellement être utilisés que pour les utilisations pour lesquelles vous vérifiez qu'ils sont équilibrés - rendre la vie beaucoup plus simple.
Connaître la langue que vous souhaitez vérifier serait utile.
Si je prends l'hypothèse qu'il n'y a pas de bruit, c'est-à-dire que tous les crochets sont des crochets utiles, ma stratégie serait itérative:
Je voudrais simplement rechercher et supprimer toutes les paires de crochets intérieurs: ceux qui ne contiennent pas de crochets à l'intérieur. Pour ce faire, il est préférable de réduire toutes les lignes en une seule ligne longue (et de rechercher un mécanisme permettant d’ajouter des références de ligne si vous devez extraire ces informations). Dans ce cas, la recherche et le remplacement sont assez simples:
Cela nécessite un tableau:
Et une boucle à travers ces éléments:
Mon fichier de test est comme suit:
Mon script complet (sans référencement de ligne) est le suivant:
La sortie de ce script s’arrête sur les utilisations illégales les plus profondes des crochets. Mais méfiez-vous: 1 / ce script ne fonctionnera pas avec des crochets dans les commentaires, les expressions régulières ou les chaînes de caractères, 2 / il ne signale pas où se trouve le problème dans le fichier d'origine, 3 / bien qu'il supprime toutes les paires équilibrées, il s'arrête au plus profond conditions d'erreur et conserve tous les supports englobants.
Le point 3 / est probablement un résultat exploitable, bien que je ne sois pas sûr du mécanisme de rapport que vous aviez en tête.
Le point 2 / est relativement facile à mettre en œuvre mais nécessite plus de quelques minutes de travail, je vous laisse le soin de le déterminer.
Le point 1 / est délicat, car vous entrez dans un tout nouveau royaume de débuts et de fins concurrents parfois imbriqués, ou de règles de citation spéciales pour les caractères spéciaux ...
la source