Анимация
JavaScript
|
Главная Библионтека •:. Полный снисок спецификаторов тина ноля можно найти в электронном справочном руководстве по Perl. Для этого введите команду perldoc -f printf. . Ниже приведено несколько примеров использования функции printf. print£("l20B", "Джек");, * выводит сзюво "ffiteK", котсрое jf распотгагается в попе шккинсй 20 симвсяюв в. * выррвнеоэ по щ>авауу краю printf (i-20s", "Дхек); t То же, только вьранЕмваЕме вьпташяется по t левомму краю аля Sarat=7.12; printf(**6.2£",5amt); » Выводит " 7.12" 5aint-7.127; printf("%6.2f", Saint); f В)одит 3", число округляется printf("Ic", 65); 4 выводит ASCII-CHMBon, # сххэтветствумций коду 65 ("A") Sajnt=9.4; printf<"%6.2f",. Samt); .. I В1водит " 9.40" printf{"»6d",$amt); . . i Выводит " 9" При выполнении форматирования каждый спецификатор поля заменяется соответствующим элементом из списка, как показано на рис. 9.2. При этом для каждого элемента в списке должен быть предусмотрен свой спецификатор поля и, наоборот, каждому спецификатору поля должен соответствовать элемент в списке. printf ("ИТОГ! 16:21 *15з *7.2f $ ?b $c Sd); Рис. 9.2. Порядок мены спецификапоров псля Чтобы вывести перед числом незначащие нули, нужно поместить символ 0 в спецификатор формата, как показано ниже: printf{"»06.2f", $amt); * всдит "009.40" Кроме функции printf, существует близкая по смыслу функция sprintf. Разница между ними состоит в том, что функция sprintf не выводит данные в выходной поток, а вместо этого просто их возвращает в вызвавшую ее программу. В результате форматированную строку данных можно присвоить скалярной переменной или использовать в любом другом выражении, как показано ниже на примере: Sweight=85; t QsjimM. результат до 2-х посте запятсй $moonweight=sprintf("%.2f", Sweight*.17); pcint "Масса ib lyie соста DCtiiedTt к."; При выполнении форматирования не забывайте, что функции printf и sprintf, в параметрах которых указан спецификатор поля автоматически округляют результат так, чтобы он поместился в отведенное ему поле. Упражнение: создание отчета В этом разделе мы рассмотрим одну из задач, с которой неизбежно сталкивается любой человек, работающий с компьютером. Речь идет об обработке исходных данных, их форматировании и составлении отчета. Эта проблема возникла не на пустом месте. Все дело в том, что компьютеры и люди оперируют данными, представленными в разных форматах. В результате без специальной обработки человеку очень трудно проанализировать машинные данные. Поэтому наша задача - отформатировать данные, находящиеся в компьютере, так, чтобы с ними было удобно работать человеку. Для выполнения этого упражнения нам понадобится набор записей о гипотетиче- • ских сотрудниках некой компании, в который входит: фамилия и имя сотрудника, его табельный номер, количество отработанных им часов и почасовая тарифная ставка. Программа должна на основе этих данных составить отчет по зарплате. Вы легко можете модифицировать исходный текст данной программы так, чтобы в результате получить любой необходимый вам отчет. Для упрощения упражнения записи с исходными данными мы будем хранить в массиве, который инициализируется в начале программы. Очевидно, что при построении реального отчета программа должна будет прочитать данные, хранящиеся в одном из файлов на диске. Однако усовершенствованием нашей программы мы займемся чуть позже. Итак, запустите свой любимый текстовый редактор, наберите в нем программу, приведенную в листинге 9.1, и сохраните ее. на диске в файле с именем Employee. Но мера строк вводить не нужно. После сохранения программы сделайте файл выполняемым, как было описано на 1-м занятии, "Начало работы с Perl". После выполнения подготовительных операций запустите программу, набрав в командной строке perl Employee Результаты работы программы приведены в листинге 9.2. 9.1. И№>й тек эгрсммы! Employee jl/usr/bin/perl U£S Strict; 2: 3: 4: 5: Щ/ iemployees=( 6: Смит,Боб,123101,9.35,40, 7: Франклин,Аписа,132912,10.IS,35, 8: Войоховиц,Тед,1Э8131,6.50,39, 9: Her,Венди,141512,9.50,40, 10: Кпи6орн,Стен,1312И,П.25,40, 11: ); 13: sub print emp { 14: щ/ (?last,$first,$emp,Shourly,$time)= 15: split(,,S tO]); 16: $fullname; 17: $fullname=sprintf("%s %a", $first, $last); 18: printf("*6d %-20s *6.2f *3d »7.2£\n", 19: $eiip, Sfullname, $hourly, $time, 20: ($hourly * $time>+.005); 21: } 22: 23: eemployees=sort { 24: my ($L1, 5Fl)=split(,, $a); 25: Ш C5L2, $E2)=lit( , , $b) ; 26: return ( $IJ. cmp $Ij2 \ СравЕлм фамалии 27: ll f Если они идесичн... $F1 cmp $F2 t TtHTP сравним иуеев 29; )! 30: )«employees; 32: foreach(employees) { 33: prirt.emp($ ); 34: > 9.2. Резут жр! Employee 1: 158В1 Тед войоховиц 6.50 39 253.50 2: В1211 Оген Кпяборн 11.25 40 450.00 3: 141512 Веиди Вег 9.50 40 380.00 4: 123101 Боб Смит 9.35 40 374.00 5- 132912 Алиса Франклин 10.15 35 355.25 ; Проведем анализ программы. Строка 7. В этой строке указывается путь к интерпретатору (измените его в соответствии с конфигурацией вашей системы) и ключ -w. Всегда включайте режим вывода предупреждений! Строка 3. Директива use strict указывает, что все переменные должны быть явно объявлены в программе щью оператора шу и строки должны быть заключены в кавычки. Строки 5-11. Список сотрудников вместе с исходными данными присваивается массиву employees. Каждый элемент массива имеет формат: фамилия и имя сотрудника, его табельный номер, величина часовой тарифной ставки и количество отработанных часов в неделю. Строка 30. Элементы массива oyees сортируются сначала по фамилии сотрудника, а затем по имени. Строка 24. Первый сортируемый элемент ($а) разбивается на части но нолям. При этом фамилия присваивается неременной а имя- $F1. Обе эти переменные описаны в блоке как приватные с помощью оператора Строка 25. Те же действия выполняются над вторым сортируемым элементом ($Ь). При этом фамилия присваивается переменной $L2, а имя - $F2. Строки 26~29. Имена сравниваются в алфавитном порядке. Синтаксис оператора sort б1л рассмотрен на 4-м занятии, "Укладка строительных блоков: списки и массивы". Строки В цикле выполняется перебор элементов отсортированного массива employees. Каждый элемент передается функции print emp(). Строка 21. Функция print emp() выполняет форматирование и печать одной строки отчета. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [ 43 ] 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |