Вход | Регистрация

Информационные технологии :: Математика и алгоритмы

Вычленение даты из строки - как лучше?

Вычленение даты из строки - как лучше?
Я
   IKSparrow
 
18.05.11 - 15:46
Есть набор строк. В этих строках может присутствовать дата в виде 01.01.01 или 01.01.2001. Варьироваться может размер года (2 или 4 символа) и знак разделения дня.месяца.года - точка, слеш, тире. Необходимо сформировать вычленить из строки такую дату и привести её к типу "дата". Вот какие варианты есть решения такой задачки, помимо того, что придётся текстовый процессор писать?:)
 
 
   Волшебник
 
1 - 18.05.11 - 15:47
см. регулярные выражения
   Живой Ископаемый
2 - 18.05.11 - 15:49
какие ограничения? нужно это сделать в запросе или в линуксе?
   1Сергей
 
3 - 18.05.11 - 15:52
СтрокаСДатамиВИпанутомФормате="бггг гыгы 21/12/12 ололо 01-05-2011 пыщ пыщ";
Стр = СтрокаСДатамиВИпанутомФормате;
Для идн=0 по 1 Цикл
   Стр=СтрЗаменить(Стр,""+Идн,"Х");
КонецЦикла;
Пока Найти(Стр,"ХХ.ХХ.ХХ")>0 цикл
...
Пока Найти(Стр,"ХХ.ХХ.ХХХХ")>0 цикл
...
Пока Найти(Стр,"ХХ-ХХ-ХХ")>0 цикл
...
Пока Найти(Стр,"ХХ-ХХ-ХХХХ")>0 цикл
...
Пока Найти(Стр,"ХХ/ХХ/ХХ")>0 цикл
...
Пока Найти(Стр,"ХХ/ХХ/ХХХХ")>0 цикл
...
   IKSparrow
 
4 - 18.05.11 - 15:53
(2) В 1Се, как угодно.
   1Сергей
 
5 - 18.05.11 - 15:53
(3)+ лениво дальше расписывать
   IKSparrow
 
6 - 18.05.11 - 15:54
(1) Уже копаю :)
   Ненавижу 1С
 
7 - 18.05.11 - 15:55
а так может быть?

22.06/1941
   andrewks
 
8 - 18.05.11 - 15:55
(0) баян
   Лефмихалыч
 
9 - 18.05.11 - 15:57
[1C]RE = New COMObject("VBScript.RegExp");
RE.Global = Истина;
RE.IgnoreCase = Истина;
RE.Pattern = "\d{1,2}\.\d{1,2}\.\d{2,4}";
Для каждого Match Из RE.Execute(Строка) Цикл
   Сообщить(""+Match.Value + "Позиция: "+Match.FirstIndex);
КонецЦикла;
[/1C]
   Ненавижу 1С
 
10 - 18.05.11 - 16:01
(9) ну, если поковыряться пальцем в носу, то например
99.13.1256
не дата
 
 Рекламное место пустует
   smaharbA
 
11 - 18.05.11 - 16:07
выкинуть все не цифири и не нужные разделители и заменить все пробелы на ентеры, далее будет просче
   IKSparrow
 
12 - 18.05.11 - 16:26
Чета фигня какая-то. Взял пример со Святой Книги Знаний, а шаблон от ЛевМихалыча и говорит, что вхождений шаблона не найдено.


   RegExp = New COMObject("VBScript.RegExp");
   RegExp.IgnoreCase = Ложь; //Игнорировать регистр
   RegExp.Global = Истина; //Поиск всех вхождений шаблона
   RegExp.MultiLine = Ложь; //Многострочный режим
   
   RegExp.Pattern = "/^\d{1,2}([-. /])\d{1,2}\1\d{2,4}$/"; //Ищем теги HTML
   Matches=RegExp.Execute("Это <hr> 01 долыводл 8983838 01-02-2001 строка <br> с тегами HTML");
   ЧислоВхождений=Matches.Count();
   Если ЧислоВхождений>0 Тогда
       Для к = 0 По ЧислоВхождений-1 Цикл
           Match = Matches.Item(к);
           Сообщить("Найден тег:"+ Match.Value);
       КонецЦикла;
   Иначе
       Сообщить("Вхождений шаблона не найдено");
   КонецЕсли;

А на этом калькуляторе выражений http://www.regexpres.narod.ru/calculator.html такой шаблон на отлично прокатывает. Что делаю не так?
   Лефмихалыч
 
13 - 18.05.11 - 16:28
(10) тоже мне проблема
   smaharbA
 
14 - 18.05.11 - 16:29
(12) выкинь ^ и $
   IKSparrow
 
15 - 18.05.11 - 16:33
(14) Не выходит каменный цветок. RegExp.Pattern = "/\d{1,2}([-. /])\d{1,2}\1\d{2,4}/"
   IKSparrow
 
16 - 18.05.11 - 16:34
А вот так получилось RegExp.Pattern = "\d{1,2}([-. /])\d{1,2}\1\d{2,4}"
   mishgan75
 
17 - 18.05.11 - 16:39
СтрЗаменить(ОднаСтрокаМногоДат,<Разделитель>,Символ.ПС)
Для Х = 1 по стрЧислоСтрок(ОднаСтрокаМногоДат) цикл
ОднаСтрокаОднаДата =стрПолучитьСтроку(ОднаСтрокаМногоДат,Х);
ДатаХ =ФункцияПоПреобразованиюСтрокиВДату_СамНапиши(ОднаСтрокаОднаДата );
конеццикла

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует