Форум » [x]Harbour » "911" » Ответить

"911"

Dima: Есть ли функция в Harbour , что бы на строке состоящей только из цифр вернула .T. , если нет то .F. ? Например xxx("123456") // .T. xxx("12W456") // .F. PS Понятно что можно сделать самопал , разобрать строку посимвольно и "каждый" проверить на Isdigit Упс , тупанул )) a:="1345" ? type(a) // "N" a:="1a345" ? type(a) // "UE"

Ответов - 19

petr707: ? Может val(a)>0 .and. (val(a)-int(val(a)))=0 самое простое empty(charrem("0123456789",a))

Dima: petr707 пишет: ? Может val(a)>0 .and. (val(a)-int(val(a)))=0 Как бы нет a:="133e245" ? val(a)>0 .and. (val(a)-int(val(a)))==0 // .T.

Dima: petr707 пишет: самое простое empty(charrem("0123456789",a)) Работает Dima пишет: a:="1345" ? type(a) // "N" a:="1a345" ? type(a) // "UE" Тоже работает Сложный выбор однако . ))


Dima: Пока пришел к выводу что Type(a)=="N" самое простое и верное решение и вернет TRUE если в строке одни цифры. Еще есть у кого варианты ?

petr707: type(a) - это нонсенс , это проверка наличия переменной <a> типа Public или Private Причем тут числа ?!

Dima: petr707 пишет: type(a) - это нонсенс , это проверка наличия переменной <a> типа Public или Private Причем тут числа ?! А так ? [pre2] proc Main local a a:="133245" ? type(a) // "N" a:="1ddd33245" ? type(a) // "UE" return [/pre2] Ведь работает. Где я не прав ?

petr707: Всякая селедка рыба, обратное неверно. Совпадение частного случая не выводит правило. Нужно доказательство(логика) а его не видно

Dima: petr707 пишет: Всякая селедка рыба, обратное неверно То есть верное решение такое empty(charrem("0123456789",a) ну или разбор строки посимвольно , так ?

petr707: Если задача звучит именно так.. Есть ли функция в Harbour , что бы на строке состоящей только из цифр вернула .T. , если нет то .F. ? то да. Хотя вариант empty(..) допускает еще и пробелы Более строгий len( charrem(..))=0

Dima: petr707 пишет: Есть ли функция в Harbour , что бы на строке состоящей только из цифр вернула .T. , если нет то .F. ? то да. Какая ?

Dima: petr707 я понял )) мы тут занялись туфтологией. сделаю разбор строки через FOR EACH c проверкой. Спасибо .

petr707: Патентный поиск не проводится, если цена вопроса меньше 10000$ Вам нужен ..рабочий результат.. или то, что ненужная функция .. есть или нет ? И потом, можно добиться чтобы новую Вашу функцию включили в DISTRIB, разве нет ? И тогда она сразу будет обладать свойством "Есть в Harbour"

Петр: «[pre2]PROCEDURE main() LOCAL reg LOCAL cText1 := "123456" LOCAL cText2 := "123W45" LOCAL cText3 := "12545679087 908798790879087" reg := hb_regexcomp("[^\d\s]") // есть ли в строке cTextX что-то кроме цифр и пробелов ? hb_regexhas(reg,cText1) // нет ? hb_regexhas(reg,cText2) // да ? hb_regexhas(reg,cText3) // нет reg := hb_regexcomp("[^\d]") // есть ли в строке cTextX что-то кроме цифр ? hb_regexhas(reg,cText1) // нет ? hb_regexhas(reg,cText2) // да ? hb_regexhas(reg,cText3) // да reg := hb_regexcomp("[\d]") // есть ли в строке cTextX цифры ? hb_regexhas(reg,cText1) // да ? hb_regexhas(reg,cText2) // да ? hb_regexhas(reg,cText3) // да reg := hb_regexcomp("[\d]{6}") // строка длиной 6 символов и состоит из цифр входит в cTextX ? hb_regexhas(reg,cText1) // да ? hb_regexhas(reg,cText2) // нет ? hb_regexhas(reg,cText3) // да reg := hb_regexcomp("[\d]{7}") // строка длиной 7 символов и состоит из цифр входит в cTextX ? hb_regexhas(reg,cText1) // нет ? hb_regexhas(reg,cText2) // нет ? hb_regexhas(reg,cText3) // да RETURN [/pre2]» Регулярные выражения - наше все А есть ли жизнь на Марсе, нет ли жизни на Марсе..

petr707: Ни разу не было необходимости использовать

Dima: Остановился на такой :) [pre2] Func _ISNUMS(cstr) return !hb_regexhas(hb_regexcomp("[^\d]"),cstr) [/pre2] Вернет TRUE если в строке только цифры

Петр: Dima пишет: Func _ISNUMS(cstr) return !hb_regexhas(hb_regexcomp("[^\d]"),cstr) Если функция будет выполнятся в цикле, каждый раз будете терять время (м.б. и ничтожное) на повторной компиляции, а так - почему бы нет.

Dima: Петр пишет: Если функция будет выполнятся в цикле да в цикле , но он не большой. загоняю в массив имена папок а затем ловлю из него те у которых цифры в названиях папок не много , до сотни.

Dima: Dima пишет: Func _ISNUMS(cstr) return !hb_regexhas(hb_regexcomp("[^\d]"),cstr) Не пойму как ее модернизировать что бы ловила не только целые числа , но и дробные. Где в качестве разделителя точка. Есть у кого идеи ? PS Например. Должно вернуть TRUE на таких числах 12345 или 123.5634564363 или 0.87268

Dima: вроде вот так "[^\d][\.]?[^\d]"



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