![Wie kann ich in Emacs eine durch Trennzeichen getrennte Wertedatei mit beim Lesen hilfreicher Hervorhebung anzeigen?](https://rvso.com/image/1303447/Wie%20kann%20ich%20in%20Emacs%20eine%20durch%20Trennzeichen%20getrennte%20Wertedatei%20mit%20beim%20Lesen%20hilfreicher%20Hervorhebung%20anzeigen%3F.png)
Wie kann ich in Emacs eine durch Trennzeichen getrennte Wertedatei mit beim Lesen hilfreicher Hervorhebung anzeigen?
Idealerweise sollte das Trennzeichen/die Trennzeichenfolge anpassbar sein.
Wenn Emacs das nicht kann, gibt es unter Linux ein anderes Tool für diese Aufgabe?
Antwort1
Bezüglich der Lösung von @Ammar ist es nicht schwierig, den Befehl so zu „korrigieren“, org-table-convert-region
dass er einen regulären Ausdruck als Trennzeichen verwendet, was in diesem Fall einfach sein könnte %%
. Ich habe eine Zeile hinzugefügt.
(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)))
Leider wird es nicht entwertet, |
was mich sehr frustriert, und es verarbeitet auch überhaupt keine Anführungszeichen. Vorausgesetzt, dass das Trennzeichen nicht in einer Zelle vorkommt, sollte es nicht schwer sein, eine Funktion zu schreiben, die es |
durch etwas anderes ersetzt (z. B. \vert{}
wenn Sie planen, nach LaTeX zu exportieren, oder ⏐, das Unicode-Zeichen VERTICAL LINE EXTENSION
) und dann die geänderte Version von ausführt org-table-convert-region
. Sie können sogar "%%
und %%"
durch ersetzen %%
, wenn Sie möchten. Natürlich habe ich %%
als Ersatz für jedes beliebige Trennzeichen verwendet (das ein Argument für die Funktion sein könnte).
Es hängt alles davon ab, wie oft Sie sich solche Dateien ansehen werden und welche Fähigkeiten Sie benötigen, um zu wissen, wie viel Arbeit Sie investieren möchten. :-)
Antwort2
In Emacs können Sie Text mit highlight-phrase
( M-s h p
) oder highlight-regexp
( M-s h r
) hervorheben.
Antwort3
Sie können das Trennzeichen in | ändern (z. B. durch sed
, aber zuerst alle | durch etwas anderes ersetzen), am Anfang und Ende jeder Zeile ein | hinzufügen und die Datei dann in Emacs in öffnen org-mode
.
Sie können auch csv-mode
und dessen verwenden csv-align-fields
.
Antwort4
Wenn Sie den Org-Modus haben, öffnen Sie die CSV-Datei, stellen Sie den Hauptmodus auf Org-Modus, markieren Sie den gesamten Puffer und klicken Sie auf C-|
, um die CSV-Datei in eine Org-Modus-Tabelle umzuwandeln.
Sie können mit Org-Mode-Tabellen alles machen, kombiniert mit Emacs' Calc, es ist leistungsfähiger als eine Tabellenkalkulationsanwendung, sieheHierals Referenz.
Für Linux gibt es unzählige Tools, mit denen Sie CSV-Dateien verarbeiten können, aber das Schweizer Messer ist awk. Lernen Sie awk, wenn Sie können, es wird Ihnen das Leben leichter machen.