Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.174] |
|
Сообщ.
#1
,
|
|
|
Ну всем известна функция Format кот-я форматирует строку, а есть ли обратная ей функция - которая форматированную строку по заданной маске выдавала в переменные?
|
Сообщ.
#2
,
|
|
|
Цитата n0wheremany @ а есть ли Нет. И быть не может. |
Сообщ.
#3
,
|
|
|
Цитата Нет. И быть не может. Ну, это ты погорячился |
Сообщ.
#4
,
|
|
|
Цитата Тестировщица @ Ну, это ты погорячился Для этого должна быть возможность взаимно-однозначного преобразования, что возможно только в ограниченном количестве частных случаев. Пример: Format('%d%d',[1,1]); |
Сообщ.
#5
,
|
|
|
Сообщ.
#6
,
|
|
|
Цитата Тестировщица @ Ну, это ты погорячился Это точно. В конце концов имея строку самого формата и результат ее работы запросто можно выполнить обратный парсинг. Правда могут проблемы когда в формате вывода указангы спецификаторы ширины. Например для строк - если реальная длина окажется больше указанной в спецификаторе, то строка будет включена полностью (будет больше чем в спецификаторе). Но в основном же можно! Да к тому же можно использовать уже работающий () sscanf из Windows (из ntdll.dll) |
Сообщ.
#7
,
|
|
|
Цитата RuSA @ Это точно. В конце концов имея строку самого формата и результат ее работы запросто можно выполнить обратный парсинг. Пожалуйста. Я приводил пример. Чуть изменю: Format('%d%d',[11,1]); Попробуй распарсить? ------ В пред. посте я написал, что лишь в некоторых частных случаях возможно обратное преобразование. |
Сообщ.
#8
,
|
|
|
Цитата Демо @ Format('%d%d',[11,1]); Попробуй распарсить? Да просто надо ещё и усказывать размер строки - а это уже пахнет copy - Т.о. всё равно придётся все делать с помощью copy и stringreplase |
Сообщ.
#9
,
|
|
|
Цитата Демо @ ... лишь в некоторых частных случаях возможно обратное преобразование. Не согласен. Вот твой пример: Цитата Демо @ Format('%d%d',[11,1]); При обратном преобразовании "111" по формату "%d%d" можно проинтерпретировать: либо как "11" и "1", либо как "1" и "11". Так что МОЖНО и тут. Се ля ви. БЯ бы сказал - выполнить обратное преобразование ОДНОЗНАЧНО не всегда возможно. Легче всего это сделать для случаев, когда в самом формате явно указаны спецификаторы ширины ("%4d"), и/или когда имеются разделители между выводимыми значениями (типа пробелов и пр. знаков). Наличие строк, которые могут превысить ширины или содержат разхделители внутри себя тоже "плохо" сказываются на однозначности. Так что, если уж надо делать ОДНОЗНАЧНЫЙ обратный парсинг - требуются дополнительные правила для разрешения возможных вариантов. |