Перетворити розділені на вкладки значення в таблицю 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. Використовуйте режим стовпчика для вставки труб

Другий крок - це найнасипніший, і я хотів би мати хоча б цю частину автоматизованою.

Примітка. Я працюю в браузері під час роботи, а іноді в мене є відкритий текстовий редактор поруч. Ефективне рішення - це те, що вимагає мінімальних зусиль. Я можу використовувати:

  • Блокнот ++
  • Загальний текстовий редактор з підтримкою пошуку / заміни regexp
  • JavaScript набраний всередині консолі браузера
  • Інтернет-сервіс
  • PHP в командному рядку ( php -a)

4
У якому середовищі ви знаходитесь? Які інструменти у вас є? З ким із них ви знайомі? Які з них ви бажаєте використовувати чи не бажаєте? Як ви визначаєте "ефективність" для цілей цього питання? Напевно, існує майже стільки ж способів виконати роботу, скільки людей, які хочуть її виконати; вам потрібно надати додаткову інформацію. Дивіться, як задати гарне запитання.
Джефф Зейтлін

@JeffZeitlin Я оновлю питання.
Салман

Це простий awkсценарій.
Вармар

@Barmar Я не використовую awk, але впевнений, що хтось інший вважатиме це корисним.
Салман А

задайте питання ПКГ щодо цього - настане lulz. Зачекайте, це вже запитували ... codegolf.stackexchange.com/questions/100613/… (зауважте, що TSV-> CSV - це лише одна різниця знаків ... {{(⊃⍵)⍪⍉⍪↑¨↓⍉↑1↓⍵}s¨'⎕T'⎕T¨(s←1↓¨⊢⊂⍨⊢=⊃)¯1⌽⍵}здається приємною для роботи, так?)
vaxquis

Відповіді:


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

Потім ви можете скопіювати цей вихід (генератор зробив більшу частину важкої роботи), вставити в блокнот ++ та очистити, якщо потрібно.


5

Якщо вам потрібне рішення командного рядка, ви також можете використовувати pandoc з фільтром для розміщення pandoc .

Помістіть свою таблицю 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є хорошою, але командний рядок, наведений у їхній відповіді, не дуже працює. Перш за все, 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-лайків.


Ви навіть не коментували мою відповідь, щоб зазначити, що це може не спрацювати. Мене вводив в оману термінальний вихід, який вирівнював текст через те, що вкладки за замовчуванням становлять 8 символів (на відміну від мого set ts=4параметра Vim ).
Руслан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.