Unformat

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Unformat

Сообщение tyomitch » 20.07.2006 (Чт) 12:08

Возникла необходимость по шаблону и результату его действия на число восстановить исходное число, т.е. сделать функцию, обратную к Format.
При этом необходимо проверять, подходит ли переданная строка под этот шаблон.
Какие у кого будут идеи по этому поводу? Чем больше я над этой задачей думаю, тем менее осуществимой она мне кажется.
Изображение

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 20.07.2006 (Чт) 12:11

Э-э, это же невозможно в общем случае. Пример - любое дробное число, приведенное к формату целого. Или я чего-то не понял?
Быть... или не быть. Вот. В чём вопрос?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.07.2006 (Чт) 12:21

Даже в формулировке "отсечённые разряды заменить нулями" не проще.
Изображение

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 20.07.2006 (Чт) 12:32

Задача слишком широко стоит. Тебе нужно вообще любой валидный формат "расформатировать"? Если да, то, наверное, неосуществимо...
Быть... или не быть. Вот. В чём вопрос?

Nikonik
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 12.07.2006 (Ср) 10:55

Сообщение Nikonik » 20.07.2006 (Чт) 15:01

Ну подходит ли строка по шаблон это просто-таки исходная задача для регулярных выражений - подключай и проверяй.

Задача действительно довольно сложная, впрочем написать функцию Format было бы не намного легче.

uhm, неосуществимого не бывает

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.07.2006 (Чт) 17:45

Nikonik, и как ты предлагаешь построить по шаблону регулярное выражение?
Ты описание этих шаблонов хоть читал, или просто от балды сказал?
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.07.2006 (Пт) 2:25

tyomitch
Приведи примеры
входнящих данных, шаблонов, результатов,

а дальше подумаем...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.07.2006 (Пт) 6:45

Млин, ну ведь функцию Format не я придумал? откройте MSDN, и читайте про шаблоны и результаты.
Когда я про сложение двух чисел пишу, мне тоже приводить примеры "входнящих данных" и результатов? :-|
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.07.2006 (Пт) 7:07

tyomitch.
ну ведь ты понимаешь что при разных входных данных и одинкововых масках будут одинаковые результаты:

Например:
format(dateserial(3002,03,18),"dd.mm.yy")=format(dateserial(2002,03,18),"dd.mm.yy")


и там и там будет "18.13.02"

или
Код: Выделить всё
format(timeserial(10,11,38), "mm:ss") = format(timeserial(11,11,38), "mm:ss")=format(timeserial(21,11,38), "mm:ss")


Везде - 11:38

Так что в принципе это невозможно.

Разве что если только не обрабатывать конкретные варианты шаблонов, и для каждого случая делать соотв. код.

Ещё всё таким можно заюзать регвыры.
т.е. например делать preg_match в результате "/(h{1,2})/" и если есть то то подмаска \\1 - это число часов. Ну вобщем по такому принципу попытаться вытащить из шабнона, все элементы. по вытащенным элементым вытащить из результата то что было до Format-а
[/syntax]
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.07.2006 (Пт) 7:56

1. Только для чисел. Даты и т.п. не нужно.
В первом посте на это указывала фраза "восстановить исходное число"

2. Ну тогда расскажи конкретно, как по шаблону (для чисел!) составлять регэкспы. Учитывая, например, что каждой решётке может соответствовать произвольное количество цифр.
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.07.2006 (Пт) 8:23

И всё таки объясни:
есть результы и шаблоны:

Код: Выделить всё
54,23   ###.00
14,6    ##.0


что ты хочешь получить?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.07.2006 (Пт) 8:44

tyomitch писал(а):Даже в формулировке "отсечённые разряды заменить нулями" не проще.

Хочу получить 54.23 и 14.6 соответственно.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.07.2006 (Пт) 10:15

Если условиться, что в строке формата не будет литералов, то я бы просто приводил бы локализованные знаки (разделитель целой и дробной части, разделитель групп и т.п.) к стандартным, удалял бы все нецифровые символы и затем использовал Val.
А с литералами в общем случае наверное нельзя.
Хотя, если строка формата также будет известна, то можно попробовать.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.07.2006 (Пт) 10:38

Литералы будут, но строка формата известна.
Изображение

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 21.07.2006 (Пт) 10:48

Я уже думал на ту же тему, что и alibek: убрать все символы, кроме цифр и разделителя дробной части, а потом просто сделать Format(s,"0"). Меня остановило то, что числа бывают в экспоненциальном и дробном формате, как минимум :?
Быть... или не быть. Вот. В чём вопрос?

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 23.07.2006 (Вс) 12:48

Хакер писал(а):есть результы и шаблоны:
54,23 ###.00
14,6 ##.0
что ты хочешь получить?
tyomitch писал(а):Хочу получить 54.23 и 14.6 соответственно.
Ну вот твоя задача и решена. 54.23 и 14.6 ты уже получил после использования format :)
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.07.2006 (Вс) 15:16

Не понял юмора :-|
Изображение

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 23.07.2006 (Вс) 16:37

tyomitch писал(а):Не понял юмора :-|
Хакер писал(а):есть результы и шаблоны
ну я думал, что входные данные и результаты - это не одно и тоже.
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!


Вернуться в Раздел для Профессионалов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

    TopList