Анимация
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 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189

волы, которые будут впоследствии заменены на значения соответствующих переменных из списка аргументов.

Строка форматирования $format может включать в себя команды форматирования, предваренные символом %. Все остальные символы копируются в выходную строку как есть. Каждый спецификатор формата (то есть, символ % и следующие за ним команды) соответствует одному, и только одному параметру, указанному после параметра $format. Если же нужно поместить в текст % как обгчный символ, необходимо его удвоить:

echo sprintf("The percentage was %d%%",$percentage);

Каждый спецификатор формата включает максимум пять элементов (в порядке их следования после символа % ):

□ Необязательный спецификатор размера поля, который указывает, сколько символов будет отведено под выводимую величину. В качестве символов-заполнителей (если значение имеет меньший размер, чем размер поля для его вывода) может использоваться пробел или 0, по умолчанию подставляется пробел. Можно задать любой другой символ-наполнитель, если указать его в строке форматирования, предварив апострофом . (См. примеры, как это делается.)

□ Опциональный спецификатор выравнивания, определяющий, будет результат выровнен по правому или по левому краю поля. По умолчанию производится выравнивание по правому краю, однако можно указать и левое выравнивание, задав символ - (минус).

□ Необязательное число, определяющее размер поля для вывода величины. Если результат не будет в поле помещаться, то он "вылезет" за края этого поля, но не будет усечен.

□ Необязательное число, предваренное точкой ". ", предписывающее, сколько знаков после запятой будет в результирующей строке. Этот спецификатор учитывается только в том случае, если происходит вывод числа с плавающей точкой, в противном случае он игнорируется.

□ Наконец, обязательный (заметьте - единственный обязательный!) спецификатор типа величины, которая будет помещена в выходную строку:

• b - очередной аргумент из списка вхводится как двоичное целое число;

• c - выводится символ с указанным в аргументе кодом;

• d - целое число;

• f - число с плавающей точкой;

• o - восьмеричное целое число;

• s - строка символов;

• x - шестнадцатеричное целое число с маленькими буквами a-z;



• X - шестнадцатеричное число с большими буквами A-Z. Вот как можно указать точность представления чисел с плавающей точкой: $money1 = 68.75; $money2 = 54.35; $money = $money1 + $money2; echo $money в1ведет "123.1"...

$formatted = sprintf ("%01.2f", $money);

echo $formatted в1ведет "123.10"!

Вот пример вывода целого числа, предваренного нужным количеством нулей:

$isodate=sprintf("%04d-%02d-%02d",$year,$month,$day);

Последний пример может вам очень пригодиться и показывает, насколько удобной может иногда быть функция sprintf() .

void printf(string $format [, mixed args, ...])

Делает то же самое, что и sprintf() , только результирующая строка не возвращается, а направляется в браузер пользователя.

string number format(float $number, int $decimals,

string $dec point=".", string $thousands sep=",");

Эта функция форматирует число с плавающей точкой с разделением его на триады с указанной точностью. Она может быть вызвана с двумя или четырьмя аргументами, но не с тремя! Параметр $decimals задает, сколько цифр после запятой должно быть у числа в выходной строке. Параметр $dec point представляет собой разделитель целой и дробной частей, а параметр $thousands sep - разделитель триад в числе (если указать на его месте пустую строку, то триады не отделяются друг от друга).

В PHP существует еще несколько функций для выполнения форматных преобразований, среди них - sscanf() и fscanf() , которые часто применяются в Си. Однако в PHP их использование весьма ограничено: чаще всего для разбора строк оказывается гораздо выгоднее привлечь регулярные выражения или функцию explode() . Именно по этой причине я здесь не уделяю повышенного внимания этим функциям.

Работа с бинарными данными

Как мы уже знаем, строки могут содержать любые, в том числе и бинарные, данные (то есть, символы с кодами, меньшими 32). Для работы с такими строками иногда удобно использовать функции pack() и unpack() .

string pack(string $format [,mixed $args, ...])

Функция pack() упаковывает заданные аргументы в бинарную строку, которая затем и возвращается. Формат параметров, а также их количество, задается при помощи



ные.

строки $format, которая представляет собой набор однобуквенных спецификаторов форматирования - наподобие тех, которые указываются в sprintf(), но только без знака % . После каждого спецификатора может стоять число, которое отмечает, сколько информации будет обработано данным спецификатором. А именно, для форматов a, A, h и H число задает, какое количество символов будет помещено в бинарную строку из тех, что находятся в очередном параметре-строке при вызове функции (то есть, определяется размер поля для вывода строки). В случае @ оно определяет абсолютную позицию, в которую будут помещены следующие данные. Для всех остальных спецификаторов следующие за ними числа задают количество аргументов, на которые распространяется действие данного формата. Вместо числа можно указать *, в этом случае подразумевается, что спецификатор действует на все оставшиеся дан-Вот полный список спецификаторов формата:

строка, свободные места в поле заполняются символом с кодом 0;

строка, свободные места заполняются пробелами;

шестнадцатеричная строка, младшие разряды в начале;

шестнадцатеричная строка, старшие разряды в начале;

знаковый байт (символ);

беззнаковый байт;

знаковое короткое целое (16 битов, порядок байтов определяется архитектурой процессора);

□ S - беззнаковое короткое целое;

□ n - беззнаковое целое (16 битов, старшие разряды в конце);

□ v - беззнаковое целое (16 битов, младшие разряды в конце);

□ i - знаковое целое (размер и порядок байтов определяется архитектурой);

□ I - беззнаковое целое;

□ l - знаковое длинное целое (32 бита, порядок байтов определяется архитектурой);

беззнаковое длинное целое;

беззнаковое длинное целое (32 бита, старшие разряды в конце); беззнаковое целое (32 бита, младшие разряды в конце); число с плавающей точкой (зависит от архитектуры); число с плавающей точкой двойной точности (зависит от архитектуры); символ с нулевым кодом; возврат назад на 1 байт;

заполнение нулевым кодом до заданной абсолютной позиции. Немало, не правда ли? Вот пример использования этой функции:



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 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189