Простой шаблон для текстового вывода
От: Аноним  
Дата: 27.03.12 09:50
Оценка:
Есть поля некоторой сущности, для примера, допустим это человек: 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> ПОСЛЕ-текст'}" будет преобразован в текст (если имя не пустое): 'ДО-текст ИМЯ ПОСЛЕ-текст', если имя пустое ничего не будет выводится
Re: Простой шаблон для текстового вывода
От: Моторокер Россия http://www.motorocker.ru
Дата: 28.03.12 20:24
Оценка: 66 (2)
А>Т.е. шаблон вида {Lastname:NOTNULL(' ')} определяет текст для выводимый, если Lastname непустой и в данном случае это этот пробел указанный.

Я делал так для вывода в HTML на основе полей БД

Полная запись <#A1="Текст надписи $" ALT="Значение не указано">
Значение первого параметра подставляется, если в значение поля заполнено.
Вместо знака доллара "$" подставляется значение, прочитанное из поля.
Значение второго параметра подставляется, если значение поля не заполнено.


В вашем случае проще использовать синтаксис
{Lastname[:текст, если непусто[:текст, если пусто]]}
не нужно усложнять всякими notnull или null.

Примеры:
{Lastname}
{Lastname:текст, если непусто}
{Lastname::текст, если пусто}
{Lastname:текст, если непусто:текст, если пусто}
Продаю срубы в Перми
Re: Простой шаблон для текстового вывода
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.03.12 01:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть поля некоторой сущности, для примера, допустим это человек: 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 и нужно форматирование, зависимое от наличия значения
Re[3]: Простой шаблон для текстового вывода
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.03.12 12:54
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Спасибо за совет, но вывод не в HTML и нужно форматирование, зависимое от наличия значения
В вашей постановке задачи нет требования форматирования, зависящего от наличия значения. Возможно, у вас стоит какая-то другая, более интересная задача. Тогда придуманное вами решение может к ней подходить.
А в качестве решения именно описанной задачи то, что вы предлагаете, совершенно неоправданно.
Ну вот посмотрите, какой из шаблонов проще написать и труднее сделать в нём ошибку?
"{Name} {Lastname} {Gender}"
"{Name}{Lastname:NOTNULL(' ')}{Lastname}{Gender:NOTNULL(' ')}{Gender}"

Вы уже в одном шаге от падения в болото Тьюринга
Автор: Lloyd
Дата: 07.03.12
. Не нужно этого делать.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Простой шаблон для текстового вывода
От: Кодт Россия  
Дата: 29.04.12 22:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Но непонятно, что делать с пробелами если некоторых данных нет, будут появлятся лишние пробелы.


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

1. Выделить паттерны реально встречающихся текстов. Например,
— Здравствуйте, {фамилия} {имя} {отчество}!
— Товарищи {иванов}, {петров}, {сидоров}, равняйсь смирно.
...

2. Задокументировать, как в каждом из этих паттернов следует сокращать текст.
— удалять левый пробел вместе с пустой подстановкой
— удалять правую запятую (точку с запятой) и пробелы вместе с пустой подстановкой
...

3. Решить, можно ли распознавать паттерны непосредственно по внешнему виду текста.
Можно ли сделать какие-то допущения, при которых пофиг на внутреннюю логику, а результат будет желанным.
Например, если удалять правую запятую, а без неё — удалять левый пробел, то "товарищ {фамилия}, {имя} {отчество}!" будет сокращён как надо, хотя формально непонятно, то ли это перечисление, то ли составное имя.
Если же такой фокус не прокатит, то придётся вводить дополнительную разметку — отвечающую именно паттернам, а не низкоуровневым формулам.
Например, {NAME:фамилия, имя отчество} и {LIST:иванов, петров, сидоров} — и в каждом случае применять свои правила.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.