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

22.06/1941
8 andrewks
 
18.05.11
15:55
(0) баян
9 Лефмихалыч
 
18.05.11
15:57
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);
КонецЦикла;
10 Ненавижу 1С
 
гуру
18.05.11
16:01
(9) ну, если поковыряться пальцем в носу, то например
99.13.1256
не дата
11 smaharbA
 
18.05.11
16:07
выкинуть все не цифири и не нужные разделители и заменить все пробелы на ентеры, далее будет просче
12 IKSparrow
 
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) тоже мне проблема
14 smaharbA
 
18.05.11
16:29
(12) выкинь ^ и $
15 IKSparrow
 
18.05.11
16:33
(14) Не выходит каменный цветок. RegExp.Pattern = "/\d{1,2}([-. /])\d{1,2}\1\d{2,4}/"
16 IKSparrow
 
18.05.11
16:34
А вот так получилось RegExp.Pattern = "\d{1,2}([-. /])\d{1,2}\1\d{2,4}"
17 mishgan75
 
18.05.11
16:39
СтрЗаменить(ОднаСтрокаМногоДат,<Разделитель>,Символ.ПС)
Для Х = 1 по стрЧислоСтрок(ОднаСтрокаМногоДат) цикл
ОднаСтрокаОднаДата =стрПолучитьСтроку(ОднаСтрокаМногоДат,Х);
ДатаХ =ФункцияПоПреобразованиюСтрокиВДату_СамНапиши(ОднаСтрокаОднаДата );
конеццикла