![]() |
|
Модераторы: THandle, bems |
![]()
|
|
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
Обрабатываю текстовые объявления, в которых указана цена.
Цены могут быть так указаны: 2,3 млн 2.3 млн 5 млн Ну в общем как податель объявы захочет. Из текста регуляркой ищу цену, например, 2,3 млн. Теперь цену нужно сохранить в базу, в поле типа float или integer, т.е. без млн. Вот такой у мну алгоритм.
Но слишком замудрёно и, наверняка, не самый быстрый способ. Может кто решал подобные проблемы и подскажет более правильный и быстрый код? |
|||
|
||||
| de_Nis |
|
|||
![]() Старательный ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 19.10.2006 Где: Молдова Репутация: 1 Всего: 6 |
Уважаемый Akella! Может быть, этой теме место в основном форуме Дельфи?
--------------------
Несчастлив не тот, у кого ничего нет, а тот, кто ничего не хочет… |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
Здесь как бы уже решение решение. В принципе вопроса как бы и нету
|
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 3 Всего: 160 |
Группировки надо использовать в регулярке. Показывай свою регулярку. -------------------- |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
какие группировки?
|
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 3 Всего: 160 |
Akella, даже тут есть. Второй пример.
-------------------- |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: нет Всего: 58 |
||||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
Да при чём здесь регулярки, если мну нужно правильно заменить 2,3 млн или 10 млн на 2,300000 и соответственно на 10000000?
Добавлено через 22 секунды Про группировку и скобки я в курсе если чё |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: нет Всего: 58 |
Akella:
Как-то так, не тестировал. Но выглядит проще, чем твое. Это сообщение отредактировал(а) Keeper89 - 30.9.2011, 14:37 |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
Чем проще? Тем что я заменяю . или , на DecimalSeparator?
Ну и если у тебя попадётся какой-то мусор, то номер не пройдёт. А у меня этот мусор будет отсеян. |
|||
|
||||
| AndreyIQ |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 5.2.2007 Репутация: нет Всего: 8 |
Интересно, что вернет Ваш код, если ввести 2,03 млн.
ИМХО проще некуда. ЗЫ Что за код в OnlyDec? |
||||||
|
|||||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 4 Всего: 89 |
Может StringReplace 'млн' -> 'x10^6' ?
Тогда строка '2,3 млн.' после замены будет читаться как '2,3 x 10 ^ 6', что есть 2'300'000. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: нет Всего: 58 |
Это дело корректировки регулярки. Если надо вообще коротко (?), то можно сделать типа того, что CodeMonkey предложил. |
|||
|
||||
| Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
StringReplace не работает с цифрами или я не понял твоего примера. Добавлено через 47 секунд покажи пример на 5 млн, 10 млн и на 1.05 млн Добавлено через 1 минуту и 37 секунд Не забывайте, что это тексты объявлений и податель объявления может написать как ему моча в голову стукнет. Хот с точкой, хоть с запятой, хоть с двумя пробелами или без оных вообще. Добавлено через 3 минуты и 12 секунд Т.е. вот это потом перевести в число?
|
||||
|
|||||
| CodeMonkey |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 4 Всего: 89 |
Ну да, но это почти не отличается от твоего исходного варианта в тексте вопроса. Только что тут разбор выражения будет выполнять интерпретатор (привет, LiveBindings В общем, смысл подхода, как я мыслю, сводится к замене узнаваемых слов (млн, миллионов, и т.п.) на числа (вернее - мат. выражения), затем вырезка всех лишних символов (пробелов и т.п.), после чего конвертация строки в число. Должно работать, если в коде предусмотрены все сокращения. А в целом тут не столько от алгоритма зависит, сколько от его шлифовки под реальные данные. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
||||||||
|
|||||||||
![]()
|
| Правила форума "Delphi" | |
|
|
Добро пожаловать в форум группы "Delphi". В разделе разрешается:
Строго запрещено:
Если Вам понравилась атмосфера форума, заходите к нам чаще! Люблю, целую, вечно Ваш, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Форум группы: delphi | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |