![Como visualizar um arquivo de valores separados por delimitador no Emacs com destaque útil para leitura?](https://rvso.com/image/1303447/Como%20visualizar%20um%20arquivo%20de%20valores%20separados%20por%20delimitador%20no%20Emacs%20com%20destaque%20%C3%BAtil%20para%20leitura%3F.png)
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-region
para 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-mode
e 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.