Анимация
JavaScript


Главная  Библионтека 

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

•:. Полный снисок спецификаторов тина ноля можно найти в электронном справочном руководстве по 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