タブ区切り値をASCIIテーブルに変換


8

このようなタブで区切られたデータを変換する最も効率的な方法は何ですか?

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

これに近いもの:

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

現在、次のようにNotepad ++を使用しています。

  1. タブをスペースに変換する
  2. データを手動で調整する
  3. 列モードを使用してパイプを挿入する

2番目のステップは最も退屈なステップであり、少なくともこの部分は自動化したいです。

注:作業時にはブラウザを使用し、テキストエディタを横に開いている場合があります。効率的なソリューションは、最小限の労力しか必要としないソリューションです。使うことができます:

  • メモ帳++
  • 正規表現の検索/置換をサポートする汎用テキストエディター
  • ブラウザコンソール内で入力されたJavaScript
  • オンラインウェブサービス
  • コマンドラインのPHP(php -a

4
どんな環境にいますか?どのようなツールがありますか?次のうち、知っているものはどれですか。どれを使用しますか、または使用しませんか?この質問の目的で「効率」をどのように定義しますか?仕事をしたい人がいるのと同じくらい多くの方法で仕事をするでしょう。追加情報を提供する必要があります。良い質問をする方法をご覧ください 。
Jeff Zeitlin 2017

@JeffZeitlin質問を更新します。
Salman A

簡単なawkスクリプトです。
Barmar

@Barmar私はawkを使用していませんが、他の誰かが役に立つと確信しています。
Salman A

頼むPCGのことについて質問- lulzが続いて起こります。待って、それはすでに求められています... codegolf.stackexchange.com/questions/100613/...を(ノートTSV-> CSVは、単一の文字の違いであることを... {{(⊃⍵)⍪⍉⍪↑¨↓⍉↑1↓⍵}s¨'⎕T'⎕T¨(s←1↓¨⊢⊂⍨⊢=⊃)¯1⌽⍵}えっ、上で動作するように素敵な十分なようだ?)

回答:


9

タブ区切り値をASCIIテーブルに変換するにはどうすればよいですか?

この種のタスクには、テキストテーブルジェネレータを使用します。

そのページにデータを貼り付けたところ、次の表が作成されました。

+------+------+------+------+------------+
| 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 |
+------+------+------+------+------------+

次に、この出力をコピーし(ジェネレーターがほとんどのハードワークを実行しました)、notepad ++に貼り付け、必要に応じてクリーンアップします。


5

あなたは、コマンドラインのソリューションを必要とする場合は、使用することができますpandocをしてpandoc-placetableフィルタ

テーブルを配置してfoo.txt実行します。

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

次の結果になります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 |

STDINから読み取るには、--file引数を省略します。STDOUTに出力するには、-o引数を省略します。


3

Unix / Linux columnコマンドを使用するというruslanのアイデアは良いものですが、彼らの回答で与えられたコマンドラインはまったく機能しません。まず 、コマンドラインでタブとしてcolumn認識しません\t(または\\t)。あなたが持っているならbash、あなたはすることができます

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

そうでなければ、あなたは行うことができます

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

しかし、それでも質問の答えにはなりません。垂直バーを取得するには、

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

次のような出力を生成します

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

ヘッダーの後にダッシュを手動で追加するのはそれほど面倒ではありません。


完全なUnix / Linuxシステムにアクセスできない場合は、Cygwinまたは他のUnixライクのいずれかを使用できます。


うまくいかないかもしれないと指摘するために私の答えにコメントすることすらしませんでした。(Vimのset ts=4設定とは異なり)タブがデフォルトで8文字であるため、テキストを揃えるターミナル出力に惑わされました。
ルスラン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.