Форум » [x]Harbour » Вытащить дату » Ответить

Вытащить дату

Dima: Есть строки вида № 00124/00000317 от 18.10.14 бла 18.10.14 бла как вытащить дату ?

Ответов - 13

PSP: Ну, если сивола "." (точка) больше в строке нет, можно по ним ориентироваться.

Dima: да можно и так. а как это сделать с помощью регулярных выражений ? не имел практики с ними.....

Haz: Dima пишет: а как это сделать с помощью регулярных выражений ? не имел практики с ними..... FUNC Test() LOCAL cString := "Есть строки вида № 00124/00000317 от 18.10.14 бла 18.10.14 бла " LOCAL cRegExp := "([0-9]{2,}[.][0-9]{2,}[.][0-9]{2,})" ? hb_RegexLike( cRegExp , cString, .F.) ? hb_Regex( cRegExp , cString, .F.)[1] RETURN NIL


Dima: Спасибо Игорь ! А вот hb_RegexLike( cRegExp , cString, .F.) возвращает .F. это норм ? Тут надо вот так [pre2] if hb_Regexhas( cRegExp , cString) ? hb_Regex( cRegExp , cString, .F.)[1] endif [/pre2]

PSP: А год - всегда две цифры или м.б. четыре?

Dima: PSP пишет: А год - всегда две цифры или м.б. четыре? ну это как юзер введет ;) обычно две.

Dima: ну тогда надо не ? hb_Regex( cRegExp , cString)[1] // так всю строку вернет а вот так ? hb_Regex( cRegExp , cString)[2] // так только дату что и надо Идею понял. Спасибо

Dima: окончательный вариант [pre2] proc main() LOCAL cString := "Есть строки вида № 00124/00000317 от 11.11.14 " *LOCAL cRegExp := ".*([0-9]{2}[.]{1}[0-9]{2}[.]{1}[0-9]{2,4}).*" LOCAL cRegExp :="([0-9]{2}[.]{1}[0-9]{2}[.]{1}[0-9]{2,4})" *? hb_Regexlike( cRegExp , cString,.f.) if hb_Regexhas( cRegExp , cString) ? hb_Regex( cRegExp , cString,.f.)[1] // по ходу а нужен ли тут 3 параметр .F. ? endif RETURN NIL [/pre2]

Dima: Dima пишет: [0-9]{2,4})" Игорь вопрос. От 2 до 4 знаков как бы не очень верно , хотя я конечно преобразую результат в CTOD(). И если будет 3 то CTOD() вернет пустую дату. Я к тому что может поймать и 3 цифры. Как сделать что бы ловило или 2 цифры или 4 ? Хотя это не принципиально , просто для себя хочу знать.

Haz: Dima пишет: Как сделать что бы ловило или 2 цифры или 4 ? Хотя это не принципиально , просто для себя хочу знать. ([0-9][0-9]|[0-9][0-9][0-9][0-9]) Ps. По уму там еще нужно организовать проверку на то что 1. в дате день - первая цифра [01] - вторая [1-9] , первая [3] - вторая [01] 2 месяц первая цифра [0] - вторая [1-9] , первая [1] - вторая [12]

Dima: скобки точно такие [] ?

Haz: Dima пишет: скобки точно такие [] ? точно - точно, это значит что в этой позиции ОДНА цифра от 0 до 9 кстати погуглить надо "проверка даты регулярное выражение " - уверен есть погуглил - оч много примеров , мы тут велосипед изобретаем

Dima: Haz пишет: Ps. По уму там еще нужно организовать проверку на то что Да не , по уму не надо ;) Это же не контроль ввода. Я просто читаю данные.



полная версия страницы