Форматирование строк

Ecjui для компьютера строки — это не более чем коллекция символов, то для человека они часто представляют концепции и данные, которые должны следовать определенным соглашениям. И даже когда вы имеете дело с компьютерами, все равно иногда необходимо гарантировать, чтобы содержимое строк следовало определенным правилам. Например, строки, которые должны быть переданы Web-браузеру, должны форматироваться в соответствии со стандартами HTML, чтобы они могли корректно ото б ражаться.
В РНР представлен широкий спектр функций, которые Moiyr применяться для форматирования строк во многих случаях. Возможно, наиболее общим примером этой функциональности является функция printf (), синтаксис которой показан ниже:
void printf (Sformat_specification[, Spararaeters...]);Параметр Sformat_specifieation — это строка, которая содержит как нормальный текст, выводимый “как есть”, так и директивы подстановки, которые заменяются с использованием значений, представленных в части Sparameters вызова функции.
Директива подстановки имеет следующую форму:
%[Р] [-]»!. Я]Т
Г — это тип параметра {см, табл. 1.4), W — минимальная длина, которую должны занимать данные в выходной строке, Р — необязательный символ-заполнитель, который должен использоваться для обеспечения того, чтобы данные занимали минимум W символов.
Таблица 1.4. Спецификаторы типа функции printf ()
Опция Значение
I Литералыштй символ процента,
Ь Целое, представленное как двоичное число (например: 101110111).
с Целое, представленное как символ с соответствующим ASCII-кодом.
d Целое, представленное как целое число со знаком.
и Целое, представленное как целое число без знака.
f Значение с плавающей точкой,
о Целое, представленное как восьмеричное число.
s Строковое значение,
х Целое, представленное в шестнадцатеричной нотации (с символами в нижнем регистре).
X Целое, представленное в шестнадцатеричной нотации (с символами вверхнем регистре).
R — это необязательный символ точности, который имеет смысл только в случае значений с плавающей точкой; он указывает число десятичных разрядов, которые должны быть использованы для представления данных.
Наконец, тире (-), расположенное между Р и W, означает, что данные должны быть выровнены влево в пределах ширины поля, заданной №.
Все это выглядит намного сложнее, чем есть на самом деле. Давайте рассмотрим несколько примеров:
%-5d
Эта конструкция представляет выровненное вправо целое значение, которое должно быть как минимум в 5 знаков длиной.
%05.3f
Эта конструкция представляет значение с плавающей точкой, как минимум пяти знаков длиной и не менее 3 десятичных разрядов после запятой. Символ 0 используется для заполнения строк до минимальной длины. Ниже показан пример.

$п = 15.32; Slog ” log ($n);
printf (”log (%0.2f> = %.5f\n”, Sn, Slog);
Сценарий выдает следующую строку: log (15.32) = 2 .72916. Для тех из вас, кто имеет- опыт программирования на языке С, следует отметить, что printf () не представляет никаких подстановок для управляющих символов с обратным слэшем, таких как \п. Если вы хотите использовать такие специальные символы, убедитесь, что вы указали значение параметра format_specif ieation с применением синтаксиса с двойными кавычками. Если директивы в нем будут найдены, интерпретатор будет проходить от одного параметра к другому до тех пор, пока не выполнит все подстановки.
К сожалению, такой подход может служить причиной некоторых серьезных проблем. Например, рассмотрим случай применения printf () в качестве основы в системе, поддерживающей несколько языков. Предложение на английском:
“The [box/case] contains [three/five] pens”
может быть переведено на другой язык с применением другой конструкции, например:
“There are [three/five] pens in the [box/case]“
Понятно, что использование printf () для того, чтобы сделать локализованную систему настолько гибкой, чтобы она могла поддерживать конструктивные формы разных языков, может оказаться сложным без возможности указания, какой параметр должен применяться для каждой директивы подстановки.
К счастью РНР позволяет это сделать за счет использования слегка измененного синтаксиса. Все, что вам нужно сделать — это предварительно указать в директиве номер параметра с последующим символом доллара (5). Например:

function replace_me ($s) {
printf ($s, 10, ‘box’);
)
replace_me (”There are Id pens in the %s\n”); replacejne (”The %2\$s contains %l\$s pens\n”);
■ •
Этот сценарий возвращает корректное значение несмотря на то, что порядок параметров во второй строке меняется (обратите внимание, что символ доллара указан с обратным слэшем, чтобы гарантировать, что он не будет обработан механизмом объявления строк РНР):
There are 10 pens in the box. The box contains 10 pens.
Функция sprintf () принимает те же параметры, что и printf (), но возвращает строку, которая является результатом ее выполнения:
$а ■ printf (”%d cases of wine\n”, 10);

Tags: , ,

Related posts


Leave a Reply