Что значит string format

String.Format

Итак, основные возможности:

Использование

Правила для маркеров
Функции форматирования

( function (format)
<
// Регистрация функции форматирования
// name — имя для использования в маркерах
// v — значение для форматирования, в функцию будет передано так же, как его передали в функцию format
// params — массив параметров, всегда есть, но межет быть нулевого размера
// Функция обязана вернуть строку, которая будет подставлена вместо метки
format. add (name, function (v, params)
<
return . ;
>);
>)(String.prototype.format);

Встроенные функции форматирования

В скрипте уже встроены функции форматирования для чисел, массивов и дат.

<0:n>— форматирование числа, если в функцию пришло не число, то будет выведено NaN. Вид чисел 1.11111111e+20 будет преобразован в нормальный: 111111111000000000000. Можно передавать строки с числом: ‘1.67’ или ‘123.456e+2’ — будет вставлено соответственно 1.67 и 12345.6.

<0:n([i][,f])>— форматирование числа с заполнением нулями до нужного числа разрядов.
i — количество разрядов для целой части, если в целой части больше разрадов, то они остаются на месте, если меньше — в начале будет вставлено нужное число нулей.
f — количество разрядов для дробной части, лишние числа будут отброшены.
Параметры можно пропускать: <0:n(,2)>— вывести число с 2-мя знаками в десятичной части.

<0:df([f])>— произвольное форматирование даты, f — строка формата с подстановками, возможные подстановки:

  • yy или yyyy — Год, всегда выводится 4 знака.
  • M или MM — Месяц, 1 или 2 знака
  • d или dd — День, 1 или 2 знака
  • H или HH — Часы, 1 или 2 знака в 24-часовом формате
  • m или mm — Минуты, 1 или 2 знака
  • s или ss — Секунды, 1 или 2 знака
  • f. ffff — Миллисекунды, от 1 до 4 знаков
Читайте также:  Что значит промысловое занятие

Более полная документация, где скачать скрипт

Скрипт для работы не требует никаких дополнительных библиотек и разбит на 3 части:

  1. Собственно реализация основного кода форматирования
  2. Форматирование чисел
  3. Форматирование даты/времени

Для уменьшения скрипта можно удалить оттуда вторую и(или) третью части.
В исходнике достаточно комментариев, что бы понять, как он работает.

Источник

Составное форматирование

В качестве входных данных для составного форматирования в .NET используется список объектов и строка составного формата. Строка составного формата состоит из фиксированного текста, в который включены индексированные местозаполнители, которые называются элементами форматирования и соответствуют объектам из списка. Операция форматирования создает результирующую строку, состоящую из исходного фиксированного текста, в который включено строковое представление объектов из списка.

Вместо использования строк составного формата можно использовать интерполированные строки, если их поддерживает язык и языковая версия, которые вы используете. Интерполированная строка — это строка, которая содержит интерполированные выражения. Каждое интерполированное выражение завершается значением выражения и включается в строку результатов, если строка назначена. Дополнительные сведения см. в разделе Интерполяция строк (справочник по C#) и Интерполированные строки (справочник по Visual Basic).

Возможность составного форматирования поддерживается следующими методами:

Метод String.Format, который возвращает отформатированную результирующую строку.

Метод StringBuilder.AppendFormat, который добавляет отформатированную результирующую строку в объект StringBuilder.

Некоторые перегруженные версии метода Console.WriteLine, которые отображают отформатированную результирующую строку в консоли.

Некоторые перегруженные версии метода TextWriter.WriteLine, которые записывают отформатированную результирующую строку в поток или файл. Классы, производные от TextWriter, например StreamWriter и HtmlTextWriter, также поддерживают эту функцию.

Метод Debug.WriteLine(String, Object[]), который выводит отформатированное сообщение в прослушиватели трассировки.

Метод TraceSource.TraceInformation(String, Object[]), который записывает информационный метод в прослушиватели трассировки.

Строка составного формата

Строка составного формата и список объектов используются в качестве аргументов методов, поддерживающих составное форматирование. Строка составного формата состоит из блоков фиксированного текста числом от нуля и больше, перемежаемых одним или несколькими элементами форматирования. Фиксированным текстом может являться произвольная строка, а каждый элемент форматирования должен соответствовать объекту или упакованной структуре из списка. В ходе составного форматирования создается новая результирующая строка, в которой все элементы форматирования заменены на строковое представление соответствующих объектов из списка.

Рассмотрим следующий фрагмент кода Format.

Здесь » Name = » и » , hours = » — фиксированный текст. Элементы форматирования — это » <0>» c индексом 0, который соответствует объекту name , и » <1:hh>» с индексом 1, который соответствует объекту DateTime.Now .

Синтаксис элементов форматирования

Каждый элемент форматирования имеет следующий вид и состоит из следующих компонентов:

Парные фигурные скобки («<" и ">«) здесь обязательны.

Индекс

Обязательный компонент index, также называемый описателем параметра, — это число, определяющее соответствующий объект из списка; индексация элементов ведется от нуля. Иными словами, элемент форматирования с индексом 0 отвечает за формат первого объекта в списке, элемент форматирования с индексом 1 служит для форматирования второго объекта в списке и т. д. В пример ниже входят четыре описателя параметров (с номерами от 0 до 3) для представления простых чисел меньше 10.

На один и тот же элемент в списке объектов может ссылаться сразу несколько элементов форматирования — достигается это путем задания одинакового описателя параметра. Например, одно и то же числовое значение можно отформатировать в шестнадцатеричном, экспоненциальном и десятичном виде путем задания следующей строки составного форматирования: «0x <0:x> <0:e><0:n>«, как показано в следующем примере.

Любой элемент форматирования может ссылаться на произвольный объект списка. Например, если имеется три объекта, то можно отформатировать сначала второй, а затем первый и третий объекты, указав следующую строку составного форматирования: » <1> <0><2>«. Объекты, на которые не ссылаются элементы форматирования, пропускаются. Если описатель параметра ссылается на элемент за пределами списка объектов, то во время выполнения создается исключение FormatException.

Выравнивание

Необязательный компонент alignment — это целое число со знаком, которое служит для указания желательной ширины поля форматирования. Если значение alignment меньше длины форматируемой строки, то alignment пропускается, и в качестве значения ширины поля используется длина форматируемой строки. Форматируемые данные выравниваются в поле по правому краю, если alignment имеет положительное значение, или по левому краю, если alignment имеет отрицательное значение. При необходимости отформатированная строка дополняется пробелами. При использовании компонента alignment необходимо поставить запятую.

В примере ниже определяются два массива: один содержит имена сотрудников, а второй — количество часов, которые они проработали в течение двух недель. Строка составного формата выравнивает имена по левому краю 20-символьного поля, а часы работы — по правому краю 5-символьного поля. Обратите внимание, что строка стандартного формата «N1» также используется для форматирования часов с одной цифрой дробной части.

Компонент строки формата

Необязательный компонент formatString — это строка формата, соответствующая типу форматируемого объекта. Если соответствующий объект является объектом DateTime, используется строка стандартного или настраиваемого формата чисел, а если соответствующий объект является значением перечисления, используется строка формата перечисления. Если компонент formatString не задан, то для числовых значений, значений даты и времени, а также перечислений используется общий формат («G»). При использовании компонента formatString необходимо двоеточие.

В приведенной ниже таблице перечислены типы и категории типов в библиотеке классов .NET, которые поддерживают предопределенный набор строк формата, а также ссылки на разделы, в которых перечисляются поддерживаемые строки формата. Обратите внимание, что форматирование строк — это расширяемый механизм, который позволяет определять новые строки формата для всех существующих типов, а также определять набор строк формата, поддерживаемых прикладным типом. Подробнее см. в разделах, посвященных интерфейсам IFormattable и ICustomFormatter.

Тип или категория типов См.
Типы даты и времени (DateTime, DateTimeOffset) Строки стандартных форматов даты и времени

Строки настраиваемых форматов даты и времени

Типы перечисления (все типы, производные от System.Enum) Строки форматов перечисления
Числовые типы (BigInteger, Byte, Decimal, Double, Int16, Int32, Int64, SByte, Single, UInt16, UInt32, UInt64) Строки стандартных числовых форматов

Оформление фигурных скобок

Начало и конец элемента форматирования обозначаются соответственно открывающей и закрывающей фигурной скобкой. Это означает, что для вывода открывающих и закрывающих фигурных скобок необходимо использовать escape-последовательности. Для вывода открывающей или закрывающей фигурной скобки в фиксированном тексте следует поставить две открывающие или, соответственно, закрывающие фигурные скобки подряд («<<" или ">>»). Фигурные скобки в элементе форматирования интерпретируются последовательно в порядке их обнаружения. Интерпретация вложенных скобок не поддерживается.

Порядок интерпретации скобок может привести к непредвиденным результатам. Например, рассмотрим элемент форматирования «<<<<0:D>>>>», который должен вывести открывающую фигурную скобку, числовое значение, отформатированное в десятичном виде, и закрывающую фигурную скобку. В действительности элемент форматирования будет интерпретирован следующим образом:

Следующий знак («D») должен интерпретироваться как указатель на десятичный числовой формат, но стоящая за ним пара фигурных скобок («>>») дает в результате одиночную фигурную скобку. Поскольку результирующая строка («D>») не является стандартным описателем числового формата, то она будет интерпретирована как строка пользовательского формата, что приведет к выводу строки «D>».

Последняя фигурная скобка («>») интерпретируется как конец элемента форматирования.

Итоговый результат, который будет выведен — строка ««. Числовое значение, которое требовалось отформатировать, выведено не будет.

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

Порядок обработки

Если вызов метода составного форматирования содержит аргумент IFormatProvider, значение которого не равно null , среда выполнения вызывает метод IFormatProvider.GetFormat, чтобы запросить реализацию ICustomFormatter. Если метод может возвращать реализацию ICustomFormatter, он кэшируется на время вызова метода составного форматирования.

Каждое значение в списке параметров, соответствующее элементу форматирования, преобразуется в строку следующим образом:

Если форматируемое значение является значением null , возвращается пустая строка String.Empty.

Если реализация ICustomFormatter доступна, среда выполнения вызывает ее метод Format. Она передает в метод значение элемента форматирования formatString (при его наличии) или значение null (в случае его отсутствия) вместе с реализацией IFormatProvider. Если вызов метода ICustomFormatter.Format возвращает null , выполнение переходит к следующему шагу; в противном случае возвращается результат вызова ICustomFormatter.Format.

Если значение реализует интерфейс IFormattable, вызывается метод ToString(String, IFormatProvider) этого интерфейса. Методу передается значение formatString (при его наличии в элементе форматирования) или значение null (в случае его отсутствия). Аргумент IFormatProvider определяется следующим образом:

Для числового значения, если вызывается метод составного форматирования с аргументом IFormatProvider, не равным null, то среда выполнения запрашивает объект NumberFormatInfo из метода IFormatProvider.GetFormat. Если не удалось предоставить объект, если аргумент имеет значение null или метод составного форматирования не имеет параметра IFormatProvider, то используется объект NumberFormatInfo для языка и региональных параметров текущего потока.

Для значения даты и времени, если вызывается метод составного форматирования с аргументом IFormatProvider, не равным null, то среда выполнения запрашивает объект DateTimeFormatInfo из метода IFormatProvider.GetFormat. Если не удалось предоставить объект, если аргумент имеет значение null или метод составного форматирования не имеет параметра IFormatProvider, то используется объект DateTimeFormatInfo для языка и региональных параметров текущего потока.

Для объектов других типов, если метод составного форматирования вызывается с аргументом IFormatProvider, то его значение передается непосредственно в реализацию IFormattable.ToString. В противном случае null передается в реализацию IFormattable.ToString.

Вызывается метод ToString без параметров, который переопределяет Object.ToString() или наследует поведение базового класса. В этом случае строка формата, указанная в компоненте formatString в элементе форматирования (при его наличии), игнорируется.

После выполнения предшествующих шагов производится выравнивание.

Примеры кода

В приведенном ниже примере одна строка создается с помощью составного форматирования, а другая – с помощью метода ToString . Оба способа форматирования дают идентичные результаты.

Предположим, что сейчас май, а текущий день недели — четверг. Тогда значение обеих строк в предыдущем примере будет Thursday May для языка и региональных параметров «Английский (США)».

Метод Console.WriteLine предоставляет те же функциональные возможности, что и метод String.Format. Единственное различие между этими двумя методами состоит в том, что метод String.Format возвращает результаты в виде строки, а метод Console.WriteLine записывает результаты в поток вывода, связанный с объектом Console. В следующем примере для форматирования значения переменной Console.WriteLine в виде денежного значения используется метод MyInt .

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

В следующем примере показывается использование выравнивания при форматировании. Форматируемые аргументы разделены знаками вертикальной черты («|»), которые иллюстрируют выравнивание.

Источник

Оцените статью