Проблемы с вкладками в Ruby при выводе в приглашение командной строки - PullRequest
2 голосов
/ 12 июля 2011

У меня есть скрипт ruby, который при вызове из приглашения оболочки принимает некоторые параметры, затем извлекает некоторую информацию из базы данных, а затем выводит эту информацию в приглашение.Я добавил табуляцию (\ t) между каждым фрагментом информации базы данных, чтобы попытаться сделать ее похожей на таблицу со столбцами и строками, и некоторые из них выстроились правильно, но не всегда.Как я могу это исправить?

Спасибо.

Ответы [ 4 ]

5 голосов
/ 12 июля 2011

Использование ljust метод string:

print 'column 1'.ljust(20)
print 'column 2'

Напечатает:

column 1            column 2

Но это не сработает для более длинных полей. Чтобы справиться с ними, вы можете обнаружить самое длинное поле или обрезать содержимое.

1 голос
/ 12 июля 2011

Вы можете решить эту проблему с помощью форматированной печати, используя операторы printf. Это дает вам контроль над тем, как печатается каждый столбец, какова его ширина, как обрабатывать данные, которые слишком длинны для столбца и т. Д. Это может быть довольно утомительным, если вы не делали этого раньше на другом с-подобном языке. См. Документацию для sprintf: http://ruby -doc.org / core / classes / Kernel.html # M001432

1 голос
/ 12 июля 2011

Это связано с тем, что в большинстве окон терминала (или оболочки, или консоли, или CLI) вкладка означает переход к следующему столбцу из последовательности 1, 9, 17, 25, 33, 41 и т. Д.

Если у вас две строки, скажем такв колонку 9.

РЕДАКТИРОВАТЬ: я забыл ответить "как это исправить".Ну, это сложно и может быть сделано, только если вы знаете максимальную длину любого столбца.Если вы это сделаете, вы можете вывести «правильное количество вкладок» между полями.Зависит от ваших данных.

0 голосов
/ 12 июля 2011

Программа column предназначена для красивой печати таблиц данных. Предполагая, что вы используете bash:

ruby-script.rb | column -s $'\t' -t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...