Konvertieren Sie durch Tabulatoren getrennte Werte in eine ASCII-Tabelle

1151
Salman A

Was ist der effizienteste Weg, um durch Tabulatoren getrennte Daten wie diese zu konvertieren:

a b c d cat NULL NULL NULL NULL NULL NULL NULL NULL d d NULL NULL c NULL c NULL NULL c d c; d NULL b NULL NULL b NULL b NULL d b; d NULL b c NULL b; c NULL b c d b; c; d a NULL NULL NULL a a NULL NULL d a; d a NULL c NULL a; c a NULL c d a; c; d a b NULL NULL a; b a b NULL d a; b; d a b c NULL a; b; c a b c d a; b; c; d 

Etwas in der Nähe:

a | b | c | d | cat -----+------+------+------+----------- NULL | NULL | NULL | NULL | NULL NULL | NULL | NULL | d | d NULL | NULL | c | NULL | c NULL | NULL | c | d | c; d NULL | b | NULL | NULL | b NULL | b | NULL | d | b; d NULL | b | c | NULL | b; c NULL | b | c | d | b; c; d a | NULL | NULL | NULL | a a | NULL | NULL | d | a; d a | NULL | c | NULL | a; c a | NULL | c | d | a; c; d a | b | NULL | NULL | a; b a | b | NULL | d | a; b; d a | b | c | NULL | a; b; c a | b | c | d | a; b; c; d 

Derzeit verwende ich Notepad ++ wie folgt:

  1. Konvertieren Sie Tabs in Leerzeichen
  2. Richten Sie die Daten manuell aus
  3. Verwenden Sie den Spaltenmodus, um die Rohre einzufügen

Der zweite Schritt ist der langwierigste und ich hätte lieber diesen Teil automatisiert.

Hinweis: Ich arbeite mit einem Browser und manchmal habe ich einen Texteditor. Die effiziente Lösung ist die, die den geringsten Aufwand erfordert. Ich kann nutzen:

  • Notepad ++
  • Generischer Texteditor mit Regex-Unterstützung für Suchen / Ersetzen
  • JavaScript wurde in die Browserkonsole eingegeben
  • Online Webservice
  • PHP in der Befehlszeile ( php -a)
7
In welcher Umgebung bist du? Welche Tools haben Sie zur Verfügung? Mit wem sind Sie vertraut? Welche wollen oder wollen Sie nicht verwenden? Wie definieren Sie "Effizienz" im Sinne dieser Frage? Es gibt wahrscheinlich fast so viele Möglichkeiten, den Job zu erledigen, als es Leute gibt, die es tun wollen; Sie müssen zusätzliche Informationen angeben. Siehe eine gute Frage. Jeff Zeitlin vor 6 Jahren 4
@JeffZeitlin Ich werde die Frage aktualisieren. Salman A vor 6 Jahren 0
Es ist ein einfaches "awk" -Skript. Barmar vor 6 Jahren 0
@ Barmar Ich benutze awk nicht, aber ich bin sicher, dass jemand anderes es nützlich finden wird. Salman A vor 6 Jahren 0
Stellen Sie eine [PCG] (https://codegolf.stackexchange.com) -Frage dazu - lulz wird folgen. Warten Sie, es wurde bereits gefragt ... https://codegolf.stackexchange.com/questions/100613/convert-csv-to-table (beachten Sie, dass TSV-> CSV nur einen Unterschied zwischen den einzelnen Zeichen darstellt ... `{{( ⊃⍵) ⍪⍉⍪ ↑ ¨ ↓ ↓ ↑ 1 ↓ ⍵} s¨'⎕T'⎕T¨ (s ← 1 ↓ ¨⊢⊂⍨⊢ = ⊢⊂⍨⊢) ¯1⌽⍵} `scheint gut genug zu sein, eh?) vaxquis vor 6 Jahren 0

3 Antworten auf die Frage

8
DavidPostill

Wie kann ich tabulatorgetrennte Werte in eine ASCII-Tabelle konvertieren?

Ich verwende Text Tables Generator für diese Art von Aufgabe.

Ich habe Ihre Daten auf dieser Seite eingefügt und die folgende Tabelle erstellt:

+------+------+------+------+------------+ | a | b | c | d | cat | +------+------+------+------+------------+ | NULL | NULL | NULL | NULL | NULL | +------+------+------+------+------------+ | NULL | NULL | NULL | d | d | +------+------+------+------+------------+ | NULL | NULL | c | NULL | c | +------+------+------+------+------------+ | NULL | NULL | c | d | c; d | +------+------+------+------+------------+ | NULL | b | NULL | NULL | b | +------+------+------+------+------------+ | NULL | b | NULL | d | b; d | +------+------+------+------+------------+ | NULL | b | c | NULL | b; c | +------+------+------+------+------------+ | NULL | b | c | d | b; c; d | +------+------+------+------+------------+ | a | NULL | NULL | NULL | a | +------+------+------+------+------------+ | a | NULL | NULL | d | a; d | +------+------+------+------+------------+ | a | NULL | c | NULL | a; c | +------+------+------+------+------------+ | a | NULL | c | d | a; c; d | +------+------+------+------+------------+ | a | b | NULL | NULL | a; b | +------+------+------+------+------------+ | a | b | NULL | d | a; b; d | +------+------+------+------+------------+ | a | b | c | NULL | a; b; c | +------+------+------+------+------------+ | a | b | c | d | a; b; c; d | +------+------+------+------+------------+ 

Sie können diese Ausgabe dann kopieren (der Generator hat den größten Teil der harten Arbeit geleistet), in Notepad ++ eingefügt und gegebenenfalls aufgeräumt.

5
mb21

Wenn Sie eine Befehlszeilenlösung benötigen, können Sie pandoc auch mit dem pandoc-placetable-Filter verwenden .

Platzieren Sie Ihren Tisch foo.txtund führen Sie ihn aus:

pandoc-placetable --file=foo.txt --delimiter="\t" --header | pandoc -f json -t markdown-simple_tables-multiline_tables -o output.md 

Welche Ergebnisse ergeben sich im Folgenden output.md:

| a | b | c | d | cat | |------|------|------|------|------------| | NULL | NULL | NULL | NULL | NULL | | NULL | NULL | NULL | d | d | | NULL | NULL | c | NULL | c | | NULL | NULL | c | d | c; d | | NULL | b | NULL | NULL | b | | NULL | b | NULL | d | b; d | | NULL | b | c | NULL | b; c | | NULL | b | c | d | b; c; d | | a | NULL | NULL | NULL | a | | a | NULL | NULL | d | a; d | | a | NULL | c | NULL | a; c | | a | NULL | c | d | a; c; d | | a | b | NULL | NULL | a; b | | a | b | NULL | d | a; b; d | | a | b | c | NULL | a; b; c | | a | b | c | d | a; b; c; d | 

Um aus STDIN zu lesen, lassen Sie das --fileArgument aus. Um an STDOUT zu drucken, lassen Sie das -oArgument aus.

2
G-Man

Die Idee von Ruslan, den Unix / Linux- columnBefehl zu verwenden, ist gut, aber die in der Antwort angegebene Befehlszeile funktioniert nicht ganz. Zunächst columnerkennt \t(oder \\t) die Befehlszeile nicht als Registerkarte. Wenn Sie haben bash, können Sie tun

column -t -s$'\t' foo.txt 

Ansonsten können Sie das tun

column -t -s"$(printf '\t')" foo.txt 

Aber auch das beantwortet die Frage nicht. Sie können die vertikalen Balken erhalten, indem Sie tun

column -t -s$'\t' -o' | ' foo.txt 

was produziert wie

a | b | c | d | cat NULL | NULL | NULL | NULL | NULL NULL | NULL | NULL | d | d NULL | NULL | c | NULL | c NULL | NULL | c | d | c; d NULL | b | NULL | NULL | b NULL | b | NULL | d | b; d NULL | b | c | NULL | b; c NULL | b | c | d | b; c; d a | NULL | NULL | NULL | a a | NULL | NULL | d | a; d a | NULL | c | NULL | a; c a | NULL | c | d | a; c; d a | b | NULL | NULL | a; b a | b | NULL | d | a; b; d a | b | c | NULL | a; b; c a | b | c | d | a; b; c; d 

Das Hinzufügen der Strichlinie nach der Kopfzeile ist nicht so langweilig.


Wenn Sie keinen Zugriff auf ein vollständiges Unix / Linux-System haben, können Sie Cygwin oder eines der anderen Unix-Likes verwenden.

Sie haben meine Antwort nicht einmal kommentiert, um darauf hinzuweisen, dass sie möglicherweise nicht funktioniert. Ich wurde von der Terminalausgabe in die Irre geführt, die den Text aufgrund von Tabulatoren mit 8 Zeichen standardmäßig ausrichtete (im Gegensatz zu meiner Vim-Einstellung "set ts = 4"). Ruslan vor 6 Jahren 0