Rainbow CSV plugin como uma alternativa ao Excel

Olá Habr! Este artigo é sobre o plugin Rainbow CSV que escrevi para 5 editores de texto:


Código VS , Vim , Texto sublime 3 , Atom , Gedit


Acho que muitos leitores deste artigo encontram periodicamente arquivos CSV (separados por vírgula), TSV (separados por tabulação) e similares. Se você tentar abri-los em um editor de texto (e de que outra forma descobrir o que há dentro?), Uma imagem completamente simples será exibida como no lado esquerdo da imagem. Olhando para ele, é difícil dizer quantas colunas estão na tabela. No lado direito da imagem está o mesmo arquivo com o RainbowCSV ativado, a legibilidade é significativamente aprimorada devido ao realce da sintaxe.


imagem


Curiosamente, a sintaxe para esse destaque é definida usando apenas uma (embora longa) linha de expressão regular:


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

A regra de destaque pode ser encontrada inteiramente, por exemplo, aqui (versão para VS Code), mas, além da própria expressão regular, não há absolutamente nada para se olhar.


Por comparação, os arquivos de sintaxe são para linguagens de uso geral, como Python, JS, C ++, etc. Geralmente ocupam várias centenas de linhas de um código muito esotérico.


Para não carregar o artigo em detalhes, é possível adivinhar quais partes básicas ele consiste e como essa expressão regular funciona é oferecida aos leitores.


Dica: Aqui está uma expressão simples ([^,]*,)?([^,]*,)? - Destaque o arquivo CSV em duas cores alternadas diferentes, mas não funcionará corretamente em vírgulas dentro de campos com aspas.


A propósito, a seguir, a versão do Rainbow CSV para o Visual Studio Code é descrita, porque Esta é a versão do plug-in atualmente mais avançada e popular tecnicamente (mais de 500.000 downloads).


Portanto, além do fato de o Rainbow CSV destacar as colunas, ele também pode:


  • Diga para qual coluna o cursor está apontando no momento: número da coluna + nome da primeira linha de título. Se não houver uma linha de cabeçalho no início do arquivo (os dados são enviados imediatamente), o usuário pode definir seu cabeçalho "Virtual".
  • Verifique automaticamente o arquivo para um número diferente de entradas por linha ou para o uso incorreto de caracteres de escape - "CSV Lint".
  • Execute uma consulta semelhante a SQL usando o interpretador RBQL interno, que permite aplicar uma classe muito ampla de transformações de texto à tabela de entrada.
    O RBQL suporta quase todas as instruções SQL (SELECT, UPDATE, WHERE, ORDER BY, TOP / LIMIT, JOIN, GROUP BY), bem como todas as funções e instruções padrão do JavaScript e Python.
    O RBQL é uma tecnologia separada, mas se encaixa muito bem com o conceito de Rainbow CSV e, portanto, essa integração oferece muitas vantagens.

Um dos recursos mais importantes dos plugins Rainbow CSV é a detecção automática de arquivos CSV pelo seu conteúdo. Essa funcionalidade é essencial porque Geralmente, os arquivos CSV (ou TSV) têm uma extensão de arquivo diferente de .csv (.tsv). Você também pode encontrar arquivos com a extensão .csv, na qual um ponto-e-vírgula é realmente usado como separador ; . O algoritmo para determinar um arquivo de tabela pelo conteúdo é muito simples - basta verificar se o número de células em cada linha ao dividir este separador é constante> 1.


Comparação do Rainbow CSV com alinhamento gráfico


Em geral, a maneira tradicional de visualizar dados CSV é importá-los para um editor gráfico como o Excel.
Comparado a esse método, o Rainbow CSV possui vantagens e desvantagens:


Vantagens:


  • O que você vê é o que obtém - você pode ter certeza de que o que é visível na tela é o conteúdo real do arquivo.
  • Ambiente familiar do seu editor de texto favorito
  • Abstração de custo zero: o destaque da sintaxe é muito "barato" do ponto de vista computacional comparado ao alinhamento gráfico.
  • Maior densidade de informações: mais dados se encaixam em uma tela - o alinhamento gráfico “consome” muito espaço devido aos espaços de alinhamento.
  • A capacidade de vincular visualmente uma coluna (destacada na mesma cor) de diferentes janelas

Desvantagens:


  • A implementação padrão usa 10 cores diferentes; portanto, quando o número de colunas é superior a 10, as cores começam a se repetir e a eficiência do código de cores das colunas diminui.
  • Não há suporte para agrupar linhas em células com escape entre aspas duplas. Aqui você pode ler os detalhes deste problema. No entanto, acredito que o CSV com quebra de linha dentro das células é um formato extremamente impraticável.

Comparação com alinhamento de texto


Outra maneira de aumentar a legibilidade dos arquivos CSV é alinhá-los com espaços, mas esse método modifica o conteúdo do arquivo e, portanto, sua aplicabilidade é muito limitada.


Além disso, na minha opinião, a legibilidade de um arquivo após o destaque sintático do Rainbow é melhor do que a de um arquivo que foi alinhado com espaços.


Um pouco sobre o projeto


A primeira versão do Rainbow CSV foi escrita há 5 anos para o Vim com base no plugin rainbow_parentheses.Como você pode ver, neste projeto, peguei emprestado não apenas parte do código, mas também metade do nome =)
As versões para VSCode, Atom e Sublime Text 3 apareceram um ano atrás.


Muitos recursos e melhorias críticas foram propostos pelos usuários do plugin.


Comparação do processo de desenvolvimento de plug-in para diferentes editores


Em conclusão, posso fazer uma pequena comparação das APIs de editores de texto populares.
As APIs para os plugins do VSCode, Atom e Sublime Text 3 são bastante semelhantes, a principal diferença é que as extensões para o VS Code e Atom são gravadas em JavaScript e para o Sublime Text 3 em Python.


Todos os três editores usam o mesmo mecanismo de expressão regular para destacar a sintaxe, portanto, mover o CSV Rainbow entre esses editores exigia apenas uma adaptação mínima dos regulares.


Em geral, posso dizer que o processo de desenvolvimento de plug-in mais agradável e conveniente é fornecido pelo VS Code. Por outro lado, foi por algum motivo que inicialmente faltava algumas das funcionalidades necessárias para a operação completa do Rainbow CSV, mas a equipe do VS Code aceitou com prazer e melhorou meu PR, que adicionou o método que eu precisava.


Escrever plugins para o Vim é muito diferente desses três editores mais recentes. O Vim usa sua própria linguagem VimScript, bem como uma variedade de comandos para manipular o conteúdo de arquivos abertos. O modelo de sintaxe que o Vim usa para destacar também é bem diferente do que o VSCode, Atom e Sublime fornecem.


Referências:


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


All Articles