El complemento Rainbow CSV como alternativa a Excel

Hola Habr! Este artículo trata sobre el complemento Rainbow CSV que escribí para 5 editores de texto:


Código VS , Vim , Sublime Text 3 , Atom , Gedit


Creo que muchos lectores de este artículo encuentran periódicamente archivos CSV (separados por comas), TSV (separados por tabulaciones) y similares. Si intenta abrirlos en un editor de texto (¿y de qué otra manera averiguar qué hay dentro?), Se abrirá una imagen de aspecto completamente plano como en el lado izquierdo de la imagen. Mirándolo, es difícil decir cuántas columnas hay en la tabla. En el lado derecho de la imagen está el mismo archivo con RainbowCSV activado, la legibilidad mejora significativamente debido al resaltado de sintaxis.


imagen


Por extraño que parezca, la sintaxis para ese resaltado se establece usando solo una línea de expresión regular (aunque larga):


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

La regla de resaltado se puede encontrar completamente, por ejemplo, aquí (versión para VS Code), pero, aparte de la expresión regular en sí misma, no hay absolutamente nada que ver.


En comparación, los archivos de sintaxis son para lenguajes de uso general como Python, JS, C ++, etc. Suelen ocupar varios cientos de líneas de un código muy esotérico.


Para no cargar el artículo en detalle, se ofrece a los lectores adivinar en qué partes básicas se compone y cómo funciona esta expresión regular.


Sugerencia: Aquí hay una expresión simple ([^,]*,)?([^,]*,)? - Resalte el archivo CSV en 2 colores alternos diferentes, pero no funcionará correctamente en comas dentro de los campos con comillas.


Por cierto, a continuación se describe la versión Rainbow CSV para Visual Studio Code, porque Esta es la versión del complemento que actualmente es la más avanzada técnicamente y más popular (más de 500,000 descargas).


Entonces, además del hecho de que Rainbow CSV resalta las columnas, también puede:


  • Indique a qué columna apunta actualmente el cursor: número de columna + nombre de la primera línea de título. Si no hay una línea de encabezado al comienzo del archivo (los datos se van inmediatamente), entonces el usuario puede configurar su encabezado "Virtual".
  • Verifique automáticamente el archivo para un número diferente de entradas por línea o para el uso incorrecto de caracteres de escape - "CSV Lint".
  • Ejecute una consulta de tipo SQL utilizando el intérprete RBQL incorporado, que le permite aplicar una clase muy amplia de transformaciones de texto a la tabla de entrada.
    RBQL admite casi todas las declaraciones SQL (SELECCIONAR, ACTUALIZAR, DONDE, ORDENAR, SUPERIOR / LÍMITE, UNIRSE, GRUPO POR), así como todas las funciones y declaraciones estándar de JavaScript y Python.
    RBQL es una tecnología separada, pero encaja muy bien con el concepto de Rainbow CSV y, por lo tanto, esta integración ofrece muchas ventajas.

Una de las características más importantes de los complementos Rainbow CSV es la detección automática de archivos CSV por su contenido. Esta funcionalidad es esencial porque A menudo, los archivos CSV (o TSV) tienen una extensión de archivo distinta de .csv (.tsv). También puede encontrar archivos con la extensión .csv en los que se utiliza un punto y coma como separador ; . El algoritmo para determinar un archivo de tabla por contenido es muy simple: solo verifique que el número de celdas en cada fila cuando se divide para este separador sea constante> 1.


Comparación de Rainbow CSV con alineación gráfica


En general, la forma tradicional de ver los datos CSV es importarlos a un editor gráfico como Excel.
En comparación con este método, Rainbow CSV tiene ventajas y desventajas:


Ventajas:


  • Lo que ves es lo que obtienes: puedes estar seguro de que lo que está visible en la pantalla es el contenido real del archivo.
  • Entorno familiar de tu editor de texto favorito
  • Abstracción de costo cero: el resaltado de sintaxis es muy "barato" desde un punto de vista computacional en comparación con la alineación gráfica.
  • Mayor densidad de información: se ajustan más datos en una pantalla: la alineación gráfica "consume" mucho espacio debido a los espacios de alineación.
  • La capacidad de vincular visualmente una columna (resaltada en el mismo color) desde diferentes ventanas

Desventajas


  • La implementación estándar utiliza 10 colores diferentes, por lo que cuando el número de columnas es superior a 10, los colores comienzan a repetirse y la eficiencia de codificación de color de las columnas disminuye.
  • No hay soporte para envolver filas en celdas que se escapan con comillas dobles. Aquí puede leer los detalles de este problema. Sin embargo, creo que CSV con salto de línea dentro de las celdas es un formato extremadamente poco práctico.

Comparación con la alineación del texto.


Otra forma de aumentar la legibilidad de los archivos CSV es alinearlos con espacios, pero este método modifica el contenido del archivo y, por lo tanto, su aplicabilidad es muy limitada.


Además, en mi opinión, la legibilidad de un archivo después del resaltado sintáctico Rainbow es mejor que la de un archivo que se ha alineado con espacios.


Un poco sobre el proyecto.


La primera versión de Rainbow CSV fue escrita hace 5 años para Vim basada en el complemento rainbow_parentheses . Como puede ver, de este proyecto tomé prestada no solo parte del código, sino también la mitad del nombre =)
Las versiones para VSCode, Atom y Sublime Text 3 aparecieron hace un año.


Los usuarios del complemento han propuesto muchas características y mejoras críticas.


Comparación del proceso de desarrollo de complementos para diferentes editores


En conclusión, puedo hacer una pequeña comparación de las API de los editores de texto populares.
Las API para los complementos para VSCode, Atom y Sublime Text 3 son bastante similares, la principal diferencia es que las extensiones para VS Code y Atom están escritas en JavaScript, y para Sublime Text 3 en Python.


Los 3 editores usan el mismo motor de expresiones regulares para resaltar la sintaxis, por lo que mover el Rainbow CSV entre estos editores solo requirió una adaptación mínima de los clientes habituales.


En general, puedo decir que VS Code proporciona el proceso de desarrollo de complementos más agradable y conveniente. Por otro lado, fue por alguna razón que inicialmente carecía de algunas de las funcionalidades necesarias para el funcionamiento completo de Rainbow CSV, pero el equipo de VS Code con mucho gusto aceptó y mejoró mi PR, que agregó el método que necesitaba.


Escribir complementos para Vim es muy diferente de estos 3 nuevos editores. Vim usa su propio lenguaje VimScript, así como una variedad de comandos para manipular el contenido de los archivos abiertos. El modelo de sintaxis que utiliza Vim para resaltar también es bastante diferente de lo que proporcionan VSCode, Atom y Sublime.


Referencias


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


All Articles