Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2010, 13:23   #1
kakawkin
Форумчанин
 
Регистрация: 21.09.2009
Сообщений: 431
По умолчанию

Надо составить "алгоритм" для поиска даты в тексте для дальнейшего прикручивания к списку чтобы распределять строки с участниками по группам опираясь на возраст.
Пишу вот так:
Код:
var i,j,l:integer;
begin
 for i:=1 to 31 do
  for j:=1 to 12 do
   for l:=1980 to 2003 do
    if Pos(i+'.'+j+'.'+l,Memo1.Text)<>0 then showmessage('ÓÐÀÀÀÀÀ');
Существует ли более простой метод поиска ?

тоесть если дата будет 1.5.2000 то все гуд. а если 01.05.2000 то ненайдет

Последний раз редактировалось Stilet; 17.10.2010 в 14:12.
kakawkin вне форума Ответить с цитированием
Старый 17.10.2010, 13:30   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,578
По умолчанию

Надо не полным перебором всех дат искать, а по маске: XX.XX.XXXX, плюс потом поверять дату на корректность (число не более 31, месяц не более 12, можно в зависимости от месяца устанавливать максимально значение в число).
Arigato вне форума Ответить с цитированием
Старый 17.10.2010, 14:00   #3
kakawkin
Форумчанин
 
Регистрация: 21.09.2009
Сообщений: 431
По умолчанию

if Pos(i+'.'+j+'.'+l,Memo1.Text)<>0 then showmessage('ЕСТЬ');
тогда как определить числа в маске если не через цикл ??? просто в голову ничего другого неприходится
kakawkin вне форума Ответить с цитированием
Старый 17.10.2010, 14:08   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,578
По умолчанию

Тут нужны либо регулярки, либо конечный автомат.

Можно в лоб так: ищем цифру, далее проверяем строку на соответствие указанного шаблона, т.е. должна идти еще 1 цифра, точка и т.д.
Arigato вне форума Ответить с цитированием
Старый 17.10.2010, 14:12   #5
kakawkin
Форумчанин
 
Регистрация: 21.09.2009
Сообщений: 431
По умолчанию

в общем откапал такой код:
Код:
if MatchesMask(Memo1.Text,'??.??.????') then showmessage('YES YES YES YES YES');
куль!
kakawkin вне форума Ответить с цитированием
Старый 17.10.2010, 14:13   #6
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Код:
var i,j,l:integer;
begin
 for i:=1 to 31 do
  for j:=1 to 12 do
   for l:=1980 to 2003 do
    if Pos(i+'.'+j+'.'+l,Memo1.Text)<>0 then showmessage('ÓÐÀÀÀÀÀ');
Цитата:
тоесть если дата будет 1.5.2000 то все гуд. а если 01.05.2000 то
ненайдет
если проблема только в этом, то
Код:
if Pos(format('%2.2d. %2.2.d. %2.2d', [i,j,l]),Memo1.Text)<>0 then showmessage('ÓÐÀÀÀÀÀ');
ZuBy вне форума Ответить с цитированием
Старый 17.10.2010, 14:13   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А если дата не в германском формате будет?
А допустим 2010-10-17 что тогда?
Нет универсального алгоритма, разве что ИИ написать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.10.2010, 14:33   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,578
По умолчанию

Цитата:
Сообщение от kakawkin Посмотреть сообщение
в общем откапал такой код:
Код:
if MatchesMask(Memo1.Text,'??.??.????') then showmessage('YES YES YES YES YES');
куль!
Это не поможет.
Во-первых, данная функция применяется для определения, соответствует ли имя файла (пусть, любая строка) заданной маски или нет, но она не ищет в строке подстроки с заданной маской.
Во-вторых, ? - любой символ, а не только цифра.
Arigato вне форума Ответить с цитированием
Старый 17.10.2010, 19:20   #9
kakawkin
Форумчанин
 
Регистрация: 21.09.2009
Сообщений: 431
По умолчанию

а какие тогда есть способы из строки выдрать дату в виде хх.хх.хххх ??? просто у меня есть лист с участниками
и мне надо опираясь на дату рождения - вычитать ее из текущего года и сортировать их по возрастам
kakawkin вне форума Ответить с цитированием
Старый 17.10.2010, 19:28   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,578
По умолчанию

Я же уже предлагал способ: находим цифру, далее проверяем последующие символы строки на соответствие шаблону. Далее ищем следующую цифру и т.д.
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите создать таблицу для поиска должников Stefanmozg Microsoft Office Excel 13 10.02.2011 13:27
создать динамический Стек через класс шаблон Petruha-nsk Общие вопросы C/C++ 1 08.11.2009 12:41
Создать шаблон класса «очередь» (C++) NieL Помощь студентам 0 09.06.2009 13:31
Как создать универсальный шаблон документа? CoolMan Microsoft Office Word 1 18.12.2007 09:10