Вывод данных
Мы уже видели, как осуществляется вывод информации в Ruby. Познакомимся с другими операторами, обеспечивающими печать данных. Создайте файл print.rb, включите в него следующий текст и посмотрите на результат выполнения полученной программы.
puts "puts всегда завершается переходом к новой строке." print "А оператор print не делает этого по умолчанию, " print "как вы видите в этом примере.\n" print "print может быть вызван сразу ", "с несколькими аргументами.\n"
Оператор p подобен оператору puts и отображает объекты в виде, понятном человеку. Не следует использовать его для вывода русских букв - он печатает их ASCII-коды.
p Time.now, Time.now+3600
Значительно большими возможностями обладает оператор printf, обеспечивающий форматный вывод. Сразу после имени оператора указывается строка формата, содержащая как обычные символы, выводимые на печать, так и спецификации преобразования, которые вызывают преобразование и печать остальных аргументов в том порядке, в каком они перечислены. Каждая спецификация преобразования начинается с символа % и заканчивается символом-спецификатором преобразования. Между % и символом-спецификатором в порядке, указанным ниже, могут располагаться следующие модификаторы:
- флаги (в любом порядке):
- указывает на то, что преобразованный аргумент должен быть прижат к левому краю поля;
+ предписывает всегда печатать число со знаком;
0 - указывает, что числа должны дополняться ведущими нулями до всей ширины поля;
пробел - указывает, что числа должны дополняться ведущими нулями до всей ширины поля;
- число, задающее минимальную ширину поля;
- точка, отделяющая указатель ширины поля от указателя точности;
- число, задающее точность.
Основные литеры-спецификаторы и разъяснение их смысла приводятся в следующей таблице.
d | Fixnum, Bignum | печать целого числа |
s | String | печать строки |
f | Float | печать дробного числа |
Включите в файл следующие операторы форматной печати и посмотрите на результаты выполнения:
printf "%8s~~%-8s\n", "abcd", "abcd" printf "%8-s::%8s\n", "abcd", "abcd" printf "%06d\n", 2**10; printf "%+6d\n", 2**10 printf "%6d\n", 2**10; printf "%+6d\n", 2.5*1.3 printf "%4.3f\n", 2.5*1.3 printf "-2/7=%+1.6f, -2/6=%2.15f\n", -2/7.to_f, -2/6.to_f
Обратите внимание, что строка формата заключается в двойные кавычки и может содержать специальные последовательности символов. Одной из них является \n. Эта последовательность дает указание интерпретатору Ruby продолжить вывод информации со следующей строки (newline). Другой часто используемой последовательностью является \t (табуляция), которая передвигает фокус вывода к следующей позиции табуляции.
puts "*\t*\t*\t*\t*" puts " 1234567 1234567 1234567 1234567 "
Пример 1.5.
(html, txt)
printf "%8s~~%-8s\n", "abcd", "abcd" printf "%8-s::%8s\n", "abcd", "abcd" printf "%06d\n", 2**10; printf "%+6d\n", 2**10 printf "%6d\n", 2**10; printf "%+6d\n", 2.5*1.3 printf "%4.3f\n", 2.5*1.3 printf "-2/7=%+1.6f, -2/6=%2.15f\n", -2/7.to_f, -2/6.to_f
Обратите внимание, что строка формата заключается в двойные кавычки и может содержать специальные последовательности символов. Одной из них является \n. Эта последовательность дает указание интерпретатору Ruby продолжить вывод информации со следующей строки (newline). Другой часто используемой последовательностью является \t (табуляция), которая передвигает фокус вывода к следующей позиции табуляции.
puts "*\t*\t*\t*\t*" puts " 1234567 1234567 1234567 1234567 "#!/usr/bin/env ruby puts "puts всегда завершается переходом к новой строке." print "А оператор print не делает этого по умолчанию, " print "как вы видите в этом примере.\n" print "print может быть вызван сразу ", "с несколькими аргументами.\n"
p Time.now, Time.now+3600
printf "%8s~~%-8s\n", "abcd", "abcd" printf "%8-s::%8s\n", "abcd", "abcd" printf "%06d\n", 2**10; printf "%+6d\n", 2**10 printf "%6d\n", 2**10; printf "%+6d\n", 2.5*1.3 printf "%4.3f\n", 2.5*1.3 printf "-2/7=%+1.6f, -2/6=%2.15f\n", -2/7.to_f, -2/6.to_f
puts "*\t*\t*\t*\t*" puts " 1234567 1234567 1234567 1234567 "
Пример 1.5.