| Автор | Сообщение |
|
|
| |
Пост N: 105
Зарегистрирован: 15.12.06
|
|
Отправлено: 19.10.10 12:21. Заголовок: Как проверить файл на соответствие маске?
Такой глупый вопрос, но ответа я не могу найти, хотя вещь вроде стандартная. Существует ли стандартная функция, которая определяет, соответствует ли имя файла (скажем, '5544.832') маске (скажем, '*.832')? Просто две строки на входе и логика на выходе. Наверняка не мне одному это понадобится.
|
 |

|
|
Ответов - 13
[только новые]
|
|
|
|
| постоянный участник
|
Пост N: 977
Зарегистрирован: 09.10.06
|
|
Отправлено: 19.10.10 12:47. Заголовок: Для Harbour смотрите..
Для Harbour смотрите ? hb_wildMatch("*.832","5544.832", .f. ) ? hb_wildMatch("*.832","5544.832", .t. ) ? hb_wildMatch("*.837","5544.832", .f. ) ? hb_wildMatch("*.837","5544.832", .t. ) Есть еще регистронезависимый вариант - функция hb_wildMatchI Для xHb скорее всего эта функция называется WildMatch
|
 |

|
|
|
| |
Пост N: 14
Зарегистрирован: 28.07.10
|
|
Отправлено: 22.10.10 07:10. Заголовок: до кучи - похожий вопрос
как проверить на соответствие формату? например - от 1 до 3 цифр "." от 1 до 3 цифр "." - короче АйПишник или - две больших русских буквы "-" две цифры и т.п.
|
 |

|
|
|
| |
Пост N: 1886
Зарегистрирован: 17.05.05
|
|
Отправлено: 22.10.10 10:16. Заголовок: SADSTAR33 пишет: ка..
|
 |

|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 22.10.10 10:45. Заголовок: 1. Регулярными выраж..
1. Регулярными выражениями 2. не от 1 до 3 цифр, а от 0 до 255. и айпи может записываться различными способами 0300.0xab.1.1 - первый байт в 8ричном виде, второй в 16ричном или одним 4-байтовым целым 3578349857 надо использовать специальную библиотек для работы с айпи)))
|
 |
|
|
|
| |
Пост N: 15
Зарегистрирован: 28.07.10
|
|
Отправлено: 25.10.10 02:47. Заголовок: Вариант
Вариант Проверка на соответствие десятично-точечному формату function IsIP(p) local result:=.t., ar:={}, a, l, i ar:=HB_ATOKENS(p,".") if len(ar)#4; return .f.; endif for i:=1 to 4 a:=ar[ i ] l:=len(a) if l=1 if !HB_RegExMatch("\d",a) result:=.f. endif elseif l=2 if !HB_RegExMatch("[1-9]\d",a) result:=.f. endif elseif l=3 if !HB_RegExMatch("[1-2]\d\d",a) result:=.f. elseif val(a)>255 result:=.f. endif else result:=.f. endif if !result; exit; endif next return result Насколько рационально? Можно все result:=.f. заменить на return .f., убрать прерывание цикла и закончить return .t. т.е. убрать переменную result совсем
|
 |

|
|
|
| |
Пост N: 1887
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.10.10 11:57. Заголовок: Еще вариант (самый п..
Еще вариант (самый простой и при желании его можно навернуть) Func IsIP(p) return HB_RegExMatch("([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})",p)
|
 |

|
|
|
| |
Пост N: 16
Зарегистрирован: 28.07.10
|
|
Отправлено: 26.10.10 00:09. Заголовок: 333.333.333.333 прой..
Этот вариант я первым делом проверил прежде чем наворотами заниматься 333.333.333.333 пройдет? 333.333.333.3334 тоже пройдет. 12345.333.333.12345 тоже пройдет. вот так уже лучше "^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$" но все равно на max255 не проверяет
|
 |

|
|
|
| |
Пост N: 1888
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.10.10 07:39. Заголовок: SADSTAR33 пишет: ..
SADSTAR33 пишет: | цитата: | "^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$" но все равно на max255 не проверяет |
| Точно , не подумал Func IsIP(p) local ret:=.t. local creg:="^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$" local j if !HB_RegExMatch(creg,p) return .f. endif for each j in HB_ATOKENS(p,".") if val(j)>255 return .f. endif next return ret
|
 |

|
|
|
| |
Пост N: 18
Зарегистрирован: 28.07.10
|
|
Отправлено: 26.10.10 08:30. Заголовок: Для полного счастья ..
Для полного счастья - удалить local ret:=.t. заменить return ret на return .t.
|
 |

|
|
|
| |
Пост N: 1889
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.10.10 08:35. Заголовок: SADSTAR33 пишет: lo..
SADSTAR33 пишет: это уже привычка ;)
|
 |

|
|
|
| постоянный участник
|
Пост N: 8106
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.11.25 14:27. Заголовок: Как проверить ПАПКУ ..
Как проверить ПАПКУ на соответствие маске ? Имею такой массив: {"C:\MiniGui_2510\Doc\ChangeLog.txt", 1364008, 0d20251002, "11:52:27", ""} {"C:\MiniGui_2510\Doc\commands.txt", 8240, 0d20250421, "14:43:15", ""} {"C:\MiniGui_2510\Doc\exdiff.txt", 32108, 0d20190207, "11:30:16", ""} {"C:\MiniGui_2510\Doc\HMG_Debugger.pdf", 159265, 0d20150919, "22:47:58", ""} {"C:\MiniGui_2510\Doc\MiniGUI.chm", 1219443, 0d20251002, "20:25:12", ""} {"C:\MiniGui_2510\Doc\Otis_manual.pdf", 661968, 0d20240226, "18:02:56", ""} {"C:\MiniGui_2510\Doc\PageScript.chm", 228130, 0d20171223, "17:00:06", ""} {"C:\MiniGui_2510\Doc\TSBrowse.chm", 167818, 0d20130407, "21:20:54", ""} {"C:\MiniGui_2510\Doc\WinReport.chm", 68499, 0d20171112, "19:27:52", ""} {"C:\MiniGui_2510\Harbour\LICENSE.txt", 43774, 0d20231122, "02:06:28", ""} {"C:\MiniGui_2510\Harbour\ReadMe.txt", 6244, 0d20250320, "22:07:53", ""} {"C:\MiniGui_2510\Harbour\bin\cmdredir.exe", 7680, 0d19990214, "23:57:50", "A"} {"C:\MiniGui_2510\HBTEST01\ReadMe.txt", 6244, 0d20250320, "22:07:53", ""} {"C:\MiniGui_2510\HBTEST02\ReadMe.txt", 6244, 0d20250320, "22:07:53", ""} Как по маске - получить вхождение для папок ? Файлы по маске получаю - lRes := hb_wildMatchI( cExcl, cFile ), а по папкам нет. Допустим маска cExcl := "\doc\" А если маска будет "\HBTEST*\" Конечно можно ручками свой алгоритм написать, а что есть в Харборе для этого ? l1 := hb_wildMatchI( "doc" , "C:\MiniGui_2510\Doc\PageScript.chm" ) l2 := hb_wildMatchI( "HbTest*", "C:\MiniGui_2510\HBTEST01\ReadMe.txt" ) MsgDebug(l1,l2) l1 и l2 даёт .F.
|
 |

|
|
|
|
|
| |
Пост N: 2020
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.11.25 17:56. Заголовок: Andrey пишет: l1 ..
Andrey пишет: | цитата: | l1 := hb_wildMatchI( "doc" , "C:\MiniGui_2510\Doc\PageScript.chm" ) l2 := hb_wildMatchI( "HbTest*", "C:\MiniGui_2510\HBTEST01\ReadMe.txt" ) MsgDebug(l1,l2) l1 и l2 даёт .F. |
| маски писать корректно, твоя "doc" означает что в строке кроме "doc" ниего не должно быть, а "HbTest*" говорит о том , что строка начинается с "HbTest"
|
 |

|
|
|
| постоянный участник
|
Пост N: 8107
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.11.25 22:42. Заголовок: Да не нашёл описание..
Да не нашёл описание масок для этой функции hb_wildMatchI в инете. Спасибо ! Заработало так: hb_wildMatchI( "*\doc\*" , "C:\MiniGui_2510\Doc\PageScript.chm" ) hb_wildMatchI( "*\HbTest*", "C:\MiniGui_2510\HBTEST01\ReadMe.txt" )
|
 |

|
|