powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Универсальное определение дат
27 сообщений из 27, показаны все 2 страниц
Универсальное определение дат
    #39710326
LeCrunch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Используется макрос, который извлекает данные из перечня документов, содержащий и интервалы дат
Раньше они были вида "28.01.2015 - 28.01.2016", использовался код
Код: vbnet
1.
2.
3.
sCheck = Split(signActual, "-")
sOt = CDate(signCheck(0))
sDo = CDate(signCheck(1))


Потом пошли типа "с 03.05.2018 по 03.05.2019", поправили на
Код: vbnet
1.
2.
3.
sCheck = Split(signActual, " ")
sOt = CDate(signCheck(1))
sDo = CDate(signCheck(3))


Но интересует, возможно ли универсально извлекать из строки даты (дд.мм.гггг)?
Нужен общий вариант, т.к. в дальнейшем документы могут поступать вперемешку и например, добавится что-то типа "29.09.2018 по 29.09.2019"
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39710329
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну самый универсальный способ - искать с помощью регулярных выражений
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39710352
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proну самый универсальный способ - искать с помощью регулярных выражений

Еще более универсальный при помощи ИИ. Первое будет тормозить на больших объемах, второе требует инвестиций. На данный момент должно помочь брать первые 10 и последние 10 символов.
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39710367
LeCrunch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Специально городить код не требуется, хотя бы общее решение для первых двух примеров.
---
По regex - вроде нашлось похожее , как подправить?
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39710368
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy брать первые 10 и последние 10 символов.LeCrunchпошли типа "с 03.05.2018 по 03.05.2019"
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39710370
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeCrunchПо regex - вроде нашлось похожее , как подправить?что-то типа
\d{2}\.\d{2}\.\d{4}
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39710372
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iMrTidyбрать первые 10 и последние 10 символов.Отличное решение!
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39710375
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КазанскийiMrTidyбрать первые 10 и последние 10 символов.Отличное решение!еще раз
LeCrunch"с 03.05.2018 по 03.05.2019"
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39710377
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
это ты придумал, в ТЗ этого не было. А если формат даты гулять будет будет, "29 августа 2019 г."?
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39710380
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КазанскийShocker.Pro,
это ты придумал, в ТЗ этого не былоЧего я придумал, если я цитирую ТС?
Я бы сам предложил Left(10), если бы не фигурировал этот вариант.

КазанскийА если формат даты гулять будет будет, "29 августа 2019 г."?Алексей, тебя сегодня подменили что ли?
LeCrunchизвлекать из строки даты (дд.мм.гггг)?
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39710655
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProiMrTidy брать первые 10 и последние 10 символов.LeCrunchпошли типа "с 03.05.2018 по 03.05.2019"

Тогда нужно предусмотреть все возможные случаи сразу, на разных языках и с ошибками. Я написал русским языком, что на данный момент первые/последние 10 будет работать. А проблемы я привык решать по мере их поступления. Когда будет прочий мусор, тогда и будет думать.
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39710710
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyна данный момент первые/последние 10 будет работатьДа блин, первые 10 выглядят так
с 03.05.20не будет работать
iMrTidyТогда нужно предусмотреть все возможные случаи сразу, на разных языках и с ошибками.Автор в явном виде задал формат:
LeCrunchдаты (дд.мм.гггг)не надо сочинять за него
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39710728
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProАвтор в явном виде задал формат:
LeCrunchдаты (дд.мм.гггг)не надо сочинять за негоавтор почему-то решил, что круг будет сплющен (или растянут) только по горизонтали
а вертикали и диагонали ему еще не встречались, и потому о них он подумает позже
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39710733
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Корректный разбор интервала дат заданный в произвольном случайном формате - задача настолько нетривиальная и сложная, что лучше озаботиться как можно большим количеством ограничений на входные данные, и если они есть - это хорошо.
Мы не знаем бизнес-логики ТС
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39711202
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProiMrTidyна данный момент первые/последние 10 будет работатьДа блин, первые 10 выглядят так
с 03.05.20не будет работать
Я не увидел, чтобы у автора было "с". Собственно, было бы здорово услышать непосредственно от ТС.
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39711203
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И даже если там пойдет вперемешку, то split в помощь, и проверку первый символ.
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39711228
LeCrunch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, сейчас, в основном, идут записи с буквой с , типа "с 03.05.2018 по 03.05.2019"
Вообще, подобные записи фигурируют в видимом штампе ЭЦП (для наглядности к полноценной отсоединенной ЭП) и наглядно обозначают срок её действия. Но как в будущем будет меняться такая строка (может, добавят г. или вместо до - по ) - х.з. Известно лишь, что в ней обязательно будут две даты (в формате ДД.ММ.ГГГГ) и их нужно последовательно вылавливать.
Может, как-то ISDATE для такой проверки приспособить?
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39711231
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyЯ не увидел, чтобы у автора было "с". Собственно, было бы здорово услышать непосредственно от ТС.ты меня пугаешь. Мало того, что это было в первом же посте, я это еще и специально процитировал. А ты опять хочешь что-то услышать от ТС.


LeCrunchИзвестно лишь, что в ней обязательно будут две даты (в формате ДД.ММ.ГГГГ) и их нужно последовательно вылавливать.
Может, как-то ISDATE для такой проверки приспособить?Вы же нашли вполне подходящий пример обработки через регулярное выражение. И IsDate там как раз фигурирует для окончательной проверки.
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39711517
zchvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
найти instr'ом первую и третью точку.
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39712031
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Хорошо, не внимательно посмотрел. Тогда полагаю split будет быстрее и проще. У кого есть желание протестировать?))
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39712180
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сплит будет быстрее, не спорю. Поиск точек - тоже, просто муторнее
Но что делать со сплитом в случае
28.01.2015-28.01.201628.01.2015/28.01.2016добавлять все время новые сплиты?
По моему, проще сделать один раз регулярку и забыть.

К тому же уметь пользоваться регулярками полезно, привыкаешь, потом за уши не оттянешь, когда одной строкой ты можешь заменить простыню циклов.
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39712194
LeCrunch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С регулярными выражениями - круто конечно, но высокий порог вхождения
Нашелся еще вариант с массивом разделителей: http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1116134&msg=16587329
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39712196
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeCrunchС регулярными выражениями - круто конечно, но высокий порог вхожденияЗубов бояться - в рот не даватьВолков бояться - в лес не ходить
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39712210
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proсплит будет быстрее, не спорю. Поиск точек - тоже, просто муторнее
Но что делать со сплитом в случае
28.01.2015-28.01.201628.01.2015/28.01.2016добавлять все время новые сплиты?
По моему, проще сделать один раз регулярку и забыть.

К тому же уметь пользоваться регулярками полезно, привыкаешь, потом за уши не оттянешь, когда одной строкой ты можешь заменить простыню циклов.ээээээ

28.01.2015/28.01.2016
28/01/2015-28/01/2016
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39712213
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хватит сочинять.
Я уже неоднократно ответил

Shocker.ProАвтор в явном виде задал формат:
LeCrunchдаты (дд.мм.гггг)не надо сочинять за негоShocker.ProКорректный разбор интервала дат заданный в произвольном случайном формате - задача настолько нетривиальная и сложная, что лучше озаботиться как можно большим количеством ограничений на входные данные, и если они есть - это хорошо.LeCrunchИзвестно лишь, что в ней обязательно будут две даты (в формате ДД.ММ.ГГГГ)о чем и зачем ты споришь?
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39712220
zchvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я распишу подробнее:

Код: vbnet
1.
2.
3.
4.
5.
k1=InStr(1,S,".")
k2=InStr(k1,S,".")
k3=InStr(k2,S,".")
d1=Mid(S,k1-2,10)
d2=Mid(S,k3-2,10)
...
Рейтинг: 0 / 0
Универсальное определение дат
    #39712717
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProПо моему, проще сделать один раз регулярку и забыть.
Иногда так и получается. А чаще потом снова допиливать регулярку, а потом еще выслушивать критику от коллег. А добавить еще один символ для сплита просто. Но тут уж хозяин-барин.
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Универсальное определение дат
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]