Есть поля некоторой сущности, для примера, допустим это человек: Name, Lastname, Gender, Address и т.д.
Нужно создать простенький шаблон для некоторого вывода. Т.е. мне нужно определиться как этот шаблон должен выглядеть, пользователь может сам их создвать.
Сперва я планировал что то вроде такого:
"{Name} {Lastname} {Gender}"
Но непонятно, что делать с пробелами если некоторых данных нет, будут появлятся лишние пробелы.
Немного "додумал" и решил сделать что-то вроде такого, что был можно было указывать текст, который будет появлятся в зависимотсти от существования данных:
"{Name}{Lastname:NOTNULL(' ')}{Lastname}{Gender:NOTNULL(' ')}{Gender}"
Т.е. шаблон вида {Lastname:NOTNULL(' ')} определяет текст для выводимый, если Lastname непустой и в данном случае это этот пробел указанный.
Можно ввести ключевое слово NULL для вывода текста если значени нет: {Lastname:NULL('Имя неизвестно')}
Как вам такой вид, не слишком пугающий?
Re: Простой шаблон для текстового вывода
От:
Аноним
Дата:
27.03.12 10:16
Оценка:
А>Как вам такой вид, не слишком пугающий?
Вот еще немного подумал:
"{Name:'ДО-текст <Value> ПОСЛЕ-текст'}" будет преобразован в текст (если имя не пустое): 'ДО-текст ИМЯ ПОСЛЕ-текст', если имя пустое ничего не будет выводится
А>Т.е. шаблон вида {Lastname:NOTNULL(' ')} определяет текст для выводимый, если Lastname непустой и в данном случае это этот пробел указанный.
Я делал так для вывода в HTML на основе полей БД
Полная запись <#A1="Текст надписи $" ALT="Значение не указано">
Значение первого параметра подставляется, если в значение поля заполнено.
Вместо знака доллара "$" подставляется значение, прочитанное из поля.
Значение второго параметра подставляется, если значение поля не заполнено.
В вашем случае проще использовать синтаксис
{Lastname[:текст, если непусто[:текст, если пусто]]}
не нужно усложнять всякими notnull или null.
Примеры:
{Lastname}
{Lastname:текст, если непусто}
{Lastname::текст, если пусто}
{Lastname:текст, если непусто:текст, если пусто}
Здравствуйте, Аноним, Вы писали:
А>Есть поля некоторой сущности, для примера, допустим это человек: Name, Lastname, Gender, Address и т.д. А>Нужно создать простенький шаблон для некоторого вывода. Т.е. мне нужно определиться как этот шаблон должен выглядеть, пользователь может сам их создвать. А>Сперва я планировал что то вроде такого: А>"{Name} {Lastname} {Gender}" А>Но непонятно, что делать с пробелами если некоторых данных нет, будут появлятся лишние пробелы. А>Немного "додумал" и решил сделать что-то вроде такого, что был можно было указывать текст, который будет появлятся в зависимотсти от существования данных: А>"{Name}{Lastname:NOTNULL(' ')}{Lastname}{Gender:NOTNULL(' ')}{Gender}"
А>Т.е. шаблон вида {Lastname:NOTNULL(' ')} определяет текст для выводимый, если Lastname непустой и в данном случае это этот пробел указанный. А>Можно ввести ключевое слово NULL для вывода текста если значени нет: {Lastname:NULL('Имя неизвестно')}
А>Как вам такой вид, не слишком пугающий?
1. А вы куда выводите? Если в HTML, то забейте — он сам при рендере съедает "лишние" пробелы (если только это не внутри тега <PRE>).
2. Если вам очень нужен посимвольный контроль за выводимым текстом, то я бы советовал не усложнять себе жизнь, а просто избавляться от всех множественных пробелов после того, как форматирование выполнено. Для тех редких случаев, когда в шаблоне хочется иметь несколько пробелов подряд, используйте какой-нибудь другой пробел, например символ с кодом 160.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Простой шаблон для текстового вывода
От:
Аноним
Дата:
29.03.12 10:16
Оценка:
Здравствуйте, Моторокер, Вы писали:
А>>Т.е. шаблон вида {Lastname:NOTNULL(' ')} определяет текст для выводимый, если Lastname непустой и в данном случае это этот пробел указанный.
М>Я делал так для вывода в HTML на основе полей БД
М>
Полная запись <#A1="Текст надписи $" ALT="Значение не указано">
М>Значение первого параметра подставляется, если в значение поля заполнено.
М>Вместо знака доллара "$" подставляется значение, прочитанное из поля.
М>Значение второго параметра подставляется, если значение поля не заполнено.
М>В вашем случае проще использовать синтаксис М>{Lastname[:текст, если непусто[:текст, если пусто]]} М>не нужно усложнять всякими notnull или null.
М>Примеры: М>{Lastname} М>{Lastname:текст, если непусто} М>{Lastname::текст, если пусто} М>{Lastname:текст, если непусто:текст, если пусто}
Мне нравится такая форма. Спасибо.
Re[2]: Простой шаблон для текстового вывода
От:
Аноним
Дата:
29.03.12 10:46
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Аноним, Вы писали:
А>>Есть поля некоторой сущности, для примера, допустим это человек: Name, Lastname, Gender, Address и т.д. А>>Нужно создать простенький шаблон для некоторого вывода. Т.е. мне нужно определиться как этот шаблон должен выглядеть, пользователь может сам их создвать. А>>Сперва я планировал что то вроде такого: А>>"{Name} {Lastname} {Gender}" А>>Но непонятно, что делать с пробелами если некоторых данных нет, будут появлятся лишние пробелы. А>>Немного "додумал" и решил сделать что-то вроде такого, что был можно было указывать текст, который будет появлятся в зависимотсти от существования данных: А>>"{Name}{Lastname:NOTNULL(' ')}{Lastname}{Gender:NOTNULL(' ')}{Gender}"
А>>Т.е. шаблон вида {Lastname:NOTNULL(' ')} определяет текст для выводимый, если Lastname непустой и в данном случае это этот пробел указанный. А>>Можно ввести ключевое слово NULL для вывода текста если значени нет: {Lastname:NULL('Имя неизвестно')}
А>>Как вам такой вид, не слишком пугающий? S>1. А вы куда выводите? Если в HTML, то забейте — он сам при рендере съедает "лишние" пробелы (если только это не внутри тега <PRE>). S>2. Если вам очень нужен посимвольный контроль за выводимым текстом, то я бы советовал не усложнять себе жизнь, а просто избавляться от всех множественных пробелов после того, как форматирование выполнено. Для тех редких случаев, когда в шаблоне хочется иметь несколько пробелов подряд, используйте какой-нибудь другой пробел, например символ с кодом 160.
Спасибо за совет, но вывод не в HTML и нужно форматирование, зависимое от наличия значения
Здравствуйте, Аноним, Вы писали: А>Спасибо за совет, но вывод не в HTML и нужно форматирование, зависимое от наличия значения
В вашей постановке задачи нет требования форматирования, зависящего от наличия значения. Возможно, у вас стоит какая-то другая, более интересная задача. Тогда придуманное вами решение может к ней подходить.
А в качестве решения именно описанной задачи то, что вы предлагаете, совершенно неоправданно.
Ну вот посмотрите, какой из шаблонов проще написать и труднее сделать в нём ошибку?
Здравствуйте, Аноним, Вы писали:
А>Но непонятно, что делать с пробелами если некоторых данных нет, будут появлятся лишние пробелы.
А если отказаться от универсального низкоуровневого императивного языка (инструкции которого лишь захламляют шаблон)?
В пользу более прозрачного, поддерживающего лишь частные случаи.
2. Задокументировать, как в каждом из этих паттернов следует сокращать текст.
— удалять левый пробел вместе с пустой подстановкой
— удалять правую запятую (точку с запятой) и пробелы вместе с пустой подстановкой
...
3. Решить, можно ли распознавать паттерны непосредственно по внешнему виду текста.
Можно ли сделать какие-то допущения, при которых пофиг на внутреннюю логику, а результат будет желанным.
Например, если удалять правую запятую, а без неё — удалять левый пробел, то "товарищ {фамилия}, {имя} {отчество}!" будет сокращён как надо, хотя формально непонятно, то ли это перечисление, то ли составное имя.
Если же такой фокус не прокатит, то придётся вводить дополнительную разметку — отвечающую именно паттернам, а не низкоуровневым формулам.
Например, {NAME:фамилия, имя отчество} и {LIST:иванов, петров, сидоров} — и в каждом случае применять свои правила.