Преобразовать значения табуляции в таблицу ASCII

1027
Salman A

Каков наиболее эффективный способ преобразования данных, разделенных табуляцией, например:

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. Используйте режим столбца, чтобы вставить трубы

Второй шаг самый утомительный, и я бы предпочел автоматизировать хотя бы эту часть.

Примечание: я использую браузер при работе, и иногда у меня есть открытый текстовый редактор. Эффективное решение - это то, которое требует минимальных усилий. Я могу использовать:

  • Notepad ++
  • Универсальный текстовый редактор с поддержкой регулярных выражений поиск / замена
  • JavaScript набран внутри консоли браузера
  • Интернет веб-сервис
  • PHP в командной строке ( php -a)
7
В какой среде вы находитесь? Какие инструменты у вас есть в наличии? С кем из них вы знакомы? Какие из них вы хотите - или не хотите - использовать? Как вы определяете «эффективность» для целей этого вопроса? Вероятно, есть почти столько же способов сделать эту работу, сколько есть людей, которые хотят это сделать; Вам необходимо предоставить дополнительную информацию. Смотрите [задать] хороший вопрос. Jeff Zeitlin 6 лет назад 4
@JeffZeitlin Я обновлю вопрос. Salman A 6 лет назад 0
Это простой сценарий `awk`. Barmar 6 лет назад 0
@ Barmar Я не использую awk, но я уверен, что кто-то еще найдет это полезным. Salman A 6 лет назад 0
задайте вопрос [PCG] (https://codegolf.stackexchange.com) об этом - lulz будет следовать. Подождите, это уже было задано ... https://codegolf.stackexchange.com/questions/100613/convert-csv-to-table (обратите внимание, что TSV-> CSV представляет собой только одну разность символов ... `{{( ⊃⍵) ⍪⍉⍪ ↑ ¨ ↓ ⍉ ↑ 1 ↓ ⍵} s¨'⎕T'⎕T¨ (s ← 1 ↓ ¨⊢⊂⍨⊢ = ⊃) ¯1⌽⍵} `достаточно хорош для работы, а?) vaxquis 6 лет назад 0

3 ответа на вопрос

8
DavidPostill

Как я могу преобразовать разделенные табуляцией значения в таблицу 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
mb21

Если вам нужно решение для командной строки, вы также можете использовать 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аргумент.

2
G-Man

Идея Руслана использовать команду 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 символов (в отличие от моей настройки Vim `set ts = 4`). Ruslan 6 лет назад 0