Como visualizar um arquivo de valores separados por delimitador no Emacs com destaque útil para leitura?

Como visualizar um arquivo de valores separados por delimitador no Emacs com destaque útil para leitura?

Como visualizar um arquivo de valores separados por delimitador no Emacs com destaque útil para leitura?

Idealmente, o caractere/string delimitador deve ser personalizável.

Se o Emacs não puder fazer isso, alguma outra ferramenta disponível no Linux para esta tarefa?

Responder1

Em relação à solução do @Ammar Não é difícil "consertar" o comando org-table-convert-regionpara pegar uma expressão regular para o separador, que neste caso poderia ser apenas %%. Eu adicionei uma linha.

(defun org-table-convert-region (beg0 end0 &optional separator)
  "Convert region to a table.
The region goes from BEG0 to END0, but these borders will be moved
slightly, to make sure a beginning of line in the first line is included.

SEPARATOR specifies the field separator in the lines.  It can have the
following values:

'(4)     Use the comma as a field separator
'(16)    Use a TAB as field separator
integer  When a number, use that many spaces as field separator
nil      When nil, the command tries to be smart and figure out the
         separator in the following way:
         - when each line contains a TAB, assume TAB-separated material
         - when each line contains a comma, assume CSV material
         - else, assume one or more SPACE characters as separator."
  (interactive "rP")
  (let* ((beg (min beg0 end0))
         (end (max beg0 end0))
         re)
    (goto-char beg)
    (beginning-of-line 1)
    (setq beg (move-marker (make-marker) (point)))
    (goto-char end)
    (if (bolp) (backward-char 1) (end-of-line 1))
    (setq end (move-marker (make-marker) (point)))
    ;; Get the right field separator
    (unless separator
      (goto-char beg)
      (setq separator
            (cond
             ((not (re-search-forward "^[^\n\t]+$" end t)) '(16))
             ((not (re-search-forward "^[^\n,]+$" end t)) '(4))
             (t 1))))
    (goto-char beg)
    (if (equal separator '(4))
        (while (< (point) end)
          ;; parse the csv stuff
          (cond
           ((looking-at "^") (insert "| "))
           ((looking-at "[ \t]*$") (replace-match " |") (beginning-of-line 2))
           ((looking-at "[ \t]*\"\\([^\"\n]*\\)\"")
            (replace-match "\\1")
            (if (looking-at "\"") (insert "\"")))
           ((looking-at "[^,\n]+") (goto-char (match-end 0)))
           ((looking-at "[ \t]*,") (replace-match " | "))
           (t (beginning-of-line 2))))
      (setq re (cond
                ((stringp separator) separator) ;; <-- I added this line
                ((equal separator '(4)) "^\\|\"?[ \t]*,[ \t]*\"?")
                ((equal separator '(16)) "^\\|\t")
                ((integerp separator)
                 (if (< separator 1)
                     (error "Number of spaces in separator must be >= 1")
                   (format "^ *\\| *\t *\\| \\{%d,\\}" separator)))
                (t (error "This should not happen"))))
      (while (re-search-forward re end t)
        (replace-match "| " t t)))
    (goto-char beg)
    (org-table-align)))

Infelizmente, ele não escapa, |o que é muito frustrante para mim, e também não aceita aspas. Supondo que o delimitador não apareça em uma célula, não deve ser difícil escrever uma função que será substituída |por outra coisa (por exemplo, \vert{}se você planeja exportar para LaTeX, ou ⏐ que é o caractere unicode VERTICAL LINE EXTENSION) e então executar o versão modificada do org-table-convert-region. Você pode até substituir "%%e %%"por %%, se desejar. É claro que usei %%como substituto para qualquer delimitador que você desejar (que pode ser um argumento para a função).

Tudo depende de quantas vezes você examinará esses arquivos e de quais recursos você precisa para saber quanto trabalho deseja investir neles. :-)

Responder2

No emacs você pode destacar algum texto com highlight-phrase( M-s h p) ou highlight-regexp( M-s h r).

Responder3

Você pode alterar o delimitador para | (por exemplo, by sed, mas primeiro substitua todos os | por outra coisa), adicione um | para cada início e fim de linha e abra o arquivo no emacs em org-mode.

Você também pode usar csv-modee seu csv-align-fields.

Responder4

Se você tiver o modo organizacional, abra o arquivo CSV, defina o modo principal como modo organizacional, marque todo o buffer e clique em C-|para transformar o arquivo CSV em uma tabela no modo organizacional.

Você pode fazer qualquer coisa nas tabelas do modo organizacional, combinado com o calc do emacs, é mais poderoso que um aplicativo de planilha, consulteaquipara referência.

Para Linux, existem inúmeras ferramentas que você pode usar para processar arquivos CSV, mas o canivete suíço deve estar errado. Aprenda awk se puder, isso tornará sua vida mais fácil.

informação relacionada