![]() |
![]() |
|
Вычленение даты из строки - как лучше? | ☑ | ||
---|---|---|---|---|
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");
|
|||
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 по стрЧислоСтрок(ОднаСтрокаМногоДат) цикл ОднаСтрокаОднаДата =стрПолучитьСтроку(ОднаСтрокаМногоДат,Х); ДатаХ =ФункцияПоПреобразованиюСтрокиВДату_СамНапиши(ОднаСтрокаОднаДата ); конеццикла |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |