Plugin Rainbow CSV comme alternative à Excel

Bonjour, Habr! Cet article concerne le plugin Rainbow CSV que j'ai écrit pour 5 éditeurs de texte:


VS Code , Vim , Sublime Text 3 , Atom , Gedit


Je pense que de nombreux lecteurs de cet article rencontrent périodiquement des fichiers CSV (séparés par des virgules), TSV (séparés par des tabulations) et similaires. Si vous essayez de les ouvrir dans un éditeur de texte (mais comment savoir ce qu'il y a d'autre à l'intérieur?), Une image complètement simple s'ouvrira comme sur le côté gauche de l'image. En le regardant, il est difficile de dire combien de colonnes se trouvent dans le tableau. Sur le côté droit de l'image se trouve le même fichier avec RainbowCSV activé, la lisibilité est considérablement améliorée en raison de la coloration syntaxique.


image


Curieusement, la syntaxe de cette mise en évidence est définie à l'aide d'une seule ligne d'expression régulière (quoique longue):


((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))? 

La règle de surbrillance peut être trouvée entièrement, par exemple, ici (version pour VS Code), mais, à part l'expression régulière elle-même, il n'y a absolument rien à regarder.


Par comparaison, les fichiers de syntaxe sont destinés aux langages à usage général tels que Python, JS, C ++, etc. Reprennent généralement plusieurs centaines de lignes d'un code très ésotérique.


Afin de ne pas charger l'article en détail, de deviner de quelles parties de base il s'agit et comment fonctionne cette expression régulière est offerte aux lecteurs.


Astuce: Voici une expression simple ([^,]*,)?([^,]*,)? - Mettez en surbrillance le fichier CSV en 2 couleurs alternées différentes, mais ne fonctionnera pas correctement sur les virgules à l'intérieur des champs échappés par des guillemets.


Soit dit en passant, ci-après la version Rainbow CSV pour Visual Studio Code est décrite, car Il s'agit de la version du plugin qui est actuellement la plus avancée et la plus populaire sur le plan technique (plus de 500 000 téléchargements).


Ainsi, outre le fait que Rainbow CSV met en évidence les colonnes, il peut également:


  • Indiquez sur quelle colonne le curseur pointe actuellement: numéro de colonne + nom de la première ligne de titre. S'il n'y a pas de ligne d'en-tête au début du fichier (les données disparaissent immédiatement), l'utilisateur peut définir son en-tête "virtuel".
  • Vérifiez automatiquement le fichier pour un nombre différent d'entrées par ligne ou pour une utilisation incorrecte des caractères d'échappement - "CSV Lint".
  • Exécutez une requête de type SQL à l'aide de l'interpréteur RBQL intégré, qui vous permet d'appliquer une classe très large de transformations de texte à la table d'entrée.
    RBQL prend en charge presque toutes les instructions SQL (SELECT, UPDATE, WHERE, ORDER BY, TOP / LIMIT, JOIN, GROUP BY) ainsi que toutes les fonctions et instructions standard de JavaScript et Python.
    RBQL est une technologie distincte, mais elle correspond très bien au concept de Rainbow CSV, et donc cette intégration offre de nombreux avantages.

L'une des caractéristiques les plus importantes des plugins Rainbow CSV est la détection automatique des fichiers CSV par leur contenu. Cette fonctionnalité est essentielle car Les fichiers CSV (ou TSV) ont souvent une extension de fichier autre que .csv (.tsv). Vous pouvez également trouver des fichiers avec l'extension .csv dans lesquels un point-virgule est réellement utilisé comme séparateur ; . L'algorithme de détermination d'un fichier de table par contenu est très simple - il suffit de vérifier que le nombre de cellules de chaque ligne lorsque split'e pour ce séparateur est constant> 1.


Comparaison de Rainbow CSV avec l'alignement graphique


En général, la manière traditionnelle d'afficher les données CSV consiste à les importer dans un éditeur graphique tel qu'Excel.
Par rapport à cette méthode, Rainbow CSV présente à la fois des avantages et des inconvénients:


Avantages:


  • Ce que vous voyez est ce que vous obtenez - vous pouvez être sûr que ce qui est visible à l'écran est le contenu réel du fichier.
  • Environnement familier de votre éditeur de texte préféré
  • Abstraction à coût nul: la mise en évidence de la syntaxe est très «bon marché» d'un point de vue informatique par rapport à l'alignement graphique.
  • Densité d'information plus élevée: plus de données tiennent sur un seul écran - l'alignement graphique «consomme» beaucoup d'espace en raison des espaces d'alignement.
  • La possibilité de lier visuellement une colonne (mise en évidence dans la même couleur) à partir de différentes fenêtres

Inconvénients:


  • L'implémentation standard utilise 10 couleurs différentes. Ainsi, lorsque le nombre de colonnes est supérieur à 10, les couleurs commencent à se répéter et l'efficacité du codage couleur des colonnes diminue.
  • Il n'y a pas de prise en charge pour encapsuler des lignes dans des cellules échappées par des guillemets doubles. Ici, vous pouvez lire les détails de ce problème. Cependant, je crois que le CSV avec coupure de ligne à l'intérieur des cellules est un format extrêmement peu pratique.

Comparaison avec l'alignement du texte


Une autre façon d'augmenter la lisibilité des fichiers CSV est de les aligner avec des espaces, mais cette méthode modifie le contenu du fichier, et donc son applicabilité est très limitée.


De plus, à mon avis, la lisibilité d'un fichier après la mise en évidence syntaxique Rainbow est meilleure que celle d'un fichier qui a été aligné avec des espaces.


Un peu sur le projet


La première version de Rainbow CSV a été écrite il y a 5 ans pour Vim basée sur le plugin rainbow_parentheses . Comme vous pouvez le voir, de ce projet, j'ai emprunté non seulement une partie du code, mais aussi la moitié du nom =)
Les versions pour VSCode, Atom et Sublime Text 3 sont apparues il y a un an.


De nombreuses fonctionnalités et améliorations critiques ont été proposées par les utilisateurs du plugin.


Comparaison du processus de développement de plug-in pour différents éditeurs


En conclusion, je peux faire une petite comparaison des API des éditeurs de texte populaires.
Les API des plugins pour VSCode, Atom et Sublime Text 3 sont assez similaires, la principale différence est que les extensions pour VS Code et Atom sont écrites en JavaScript et pour Sublime Text 3 en Python.


Les 3 éditeurs utilisent le même moteur d'expression régulière pour la coloration syntaxique, donc déplacer le Rainbow CSV entre ces éditeurs ne nécessitait qu'une adaptation minimale des habitués.


En général, je peux dire que le processus de développement de plug-in le plus agréable et le plus pratique est fourni par VS Code. D'un autre côté, c'est pour une raison quelconque qu'il manquait initialement certaines des fonctionnalités nécessaires au fonctionnement complet de Rainbow CSV, mais l'équipe VS Code a volontiers accepté et amélioré mon RP, ce qui a ajouté la méthode dont j'avais besoin.


L'écriture de plugins pour Vim est très différente de ces 3 nouveaux éditeurs. Vim utilise son propre langage VimScript, ainsi qu'une variété de commandes pour manipuler le contenu des fichiers ouverts. Le modèle de syntaxe que Vim utilise pour la mise en évidence est également très différent de ce que VSCode, Atom et Sublime fournissent.


Références:


Source: https://habr.com/ru/post/fr429548/


All Articles