Автор | Сообщение |
|
| |
Пост N: 5952
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.08.16 21:25. Заголовок: "911"
Есть ли функция в Harbour , что бы на строке состоящей только из цифр вернула .T. , если нет то .F. ? Например xxx("123456") // .T. xxx("12W456") // .F. PS Понятно что можно сделать самопал , разобрать строку посимвольно и "каждый" проверить на Isdigit Упс , тупанул )) a:="1345" ? type(a) // "N" a:="1a345" ? type(a) // "UE"
|
|
|
Ответов - 19
[только новые]
|
|
|
| |
Пост N: 201
Зарегистрирован: 21.04.13
|
|
Отправлено: 09.08.16 21:47. Заголовок: Немного не понял..
? Может val(a)>0 .and. (val(a)-int(val(a)))=0 самое простое empty(charrem("0123456789",a))
|
|
|
|
| |
Пост N: 5953
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.08.16 21:51. Заголовок: petr707 пишет: ? Мо..
petr707 пишет: цитата: | ? Может val(a)>0 .and. (val(a)-int(val(a)))=0 |
| Как бы нет a:="133e245" ? val(a)>0 .and. (val(a)-int(val(a)))==0 // .T.
|
|
|
|
| |
Пост N: 5954
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.08.16 21:54. Заголовок: petr707 пишет: само..
petr707 пишет: цитата: | самое простое empty(charrem("0123456789",a)) |
| Работает Dima пишет: цитата: | a:="1345" ? type(a) // "N" a:="1a345" ? type(a) // "UE" |
| Тоже работает Сложный выбор однако . ))
|
|
|
|
| |
Пост N: 5955
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.08.16 22:10. Заголовок: Пока пришел к выводу..
Пока пришел к выводу что Type(a)=="N" самое простое и верное решение и вернет TRUE если в строке одни цифры. Еще есть у кого варианты ?
|
|
|
|
| |
Пост N: 202
Зарегистрирован: 21.04.13
|
|
Отправлено: 09.08.16 22:12. Заголовок: Не понял
type(a) - это нонсенс , это проверка наличия переменной <a> типа Public или Private Причем тут числа ?!
|
|
|
|
| |
Пост N: 5956
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.08.16 22:20. Заголовок: petr707 пишет: type..
petr707 пишет: цитата: | type(a) - это нонсенс , это проверка наличия переменной <a> типа Public или Private Причем тут числа ?! |
| А так ? proc Main local a a:="133245" ? type(a) // "N" a:="1ddd33245" ? type(a) // "UE" return Ведь работает. Где я не прав ?
|
|
|
|
| |
Пост N: 203
Зарегистрирован: 21.04.13
|
|
Отправлено: 09.08.16 22:24. Заголовок: Полагаю, что нет, неправ.
Всякая селедка рыба, обратное неверно. Совпадение частного случая не выводит правило. Нужно доказательство(логика) а его не видно
|
|
|
|
| |
Пост N: 5957
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.08.16 22:36. Заголовок: petr707 пишет: сяка..
petr707 пишет: цитата: | Всякая селедка рыба, обратное неверно |
| То есть верное решение такое empty(charrem("0123456789",a) ну или разбор строки посимвольно , так ?
|
|
|
|
| |
Пост N: 204
Зарегистрирован: 21.04.13
|
|
Отправлено: 09.08.16 23:00. Заголовок: Если..
Если задача звучит именно так.. Есть ли функция в Harbour , что бы на строке состоящей только из цифр вернула .T. , если нет то .F. ? то да. Хотя вариант empty(..) допускает еще и пробелы Более строгий len( charrem(..))=0
|
|
|
|
| |
Пост N: 5958
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.08.16 23:01. Заголовок: petr707 пишет: Есть..
petr707 пишет: цитата: | Есть ли функция в Harbour , что бы на строке состоящей только из цифр вернула .T. , если нет то .F. ? то да. |
| Какая ?
|
|
|
|
| |
Пост N: 5959
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.08.16 23:05. Заголовок: petr707 я понял )) ..
petr707 я понял )) мы тут занялись туфтологией. сделаю разбор строки через FOR EACH c проверкой. Спасибо .
|
|
|
|
|
| |
Пост N: 205
Зарегистрирован: 21.04.13
|
|
Отправлено: 09.08.16 23:07. Заголовок: Казуистика..
Патентный поиск не проводится, если цена вопроса меньше 10000$ Вам нужен ..рабочий результат.. или то, что ненужная функция .. есть или нет ? И потом, можно добиться чтобы новую Вашу функцию включили в DISTRIB, разве нет ? И тогда она сразу будет обладать свойством "Есть в Harbour"
|
|
|
|
| постоянный участник
|
Пост N: 1242
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.08.16 23:23. Заголовок: «PROCEDURE main() ..
« 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 » Регулярные выражения - наше все А есть ли жизнь на Марсе, нет ли жизни на Марсе..
|
|
|
|
| |
Пост N: 206
Зарегистрирован: 21.04.13
|
|
Отправлено: 10.08.16 06:06. Заголовок: Очень красиво, класс, спасибо
Ни разу не было необходимости использовать
|
|
|
|
| |
Пост N: 5960
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.08.16 10:18. Заголовок: Остановился на такой..
Остановился на такой :) Func _ISNUMS(cstr) return !hb_regexhas(hb_regexcomp("[^\d]"),cstr) Вернет TRUE если в строке только цифры
|
|
|
|
| постоянный участник
|
Пост N: 1243
Зарегистрирован: 09.10.06
|
|
Отправлено: 10.08.16 15:26. Заголовок: Dima пишет: Func ..
Dima пишет: цитата: | Func _ISNUMS(cstr) return !hb_regexhas(hb_regexcomp("[^\d]"),cstr) |
| Если функция будет выполнятся в цикле, каждый раз будете терять время (м.б. и ничтожное) на повторной компиляции, а так - почему бы нет.
|
|
|
|
| |
Пост N: 5961
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.08.16 15:32. Заголовок: Петр пишет: Если фу..
Петр пишет: цитата: | Если функция будет выполнятся в цикле |
| да в цикле , но он не большой. загоняю в массив имена папок а затем ловлю из него те у которых цифры в названиях папок не много , до сотни.
|
|
|
|
| |
Пост N: 6141
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.11.16 15:23. Заголовок: Dima пишет: Func _..
Dima пишет: цитата: | Func _ISNUMS(cstr) return !hb_regexhas(hb_regexcomp("[^\d]"),cstr) |
| Не пойму как ее модернизировать что бы ловила не только целые числа , но и дробные. Где в качестве разделителя точка. Есть у кого идеи ? PS Например. Должно вернуть TRUE на таких числах 12345 или 123.5634564363 или 0.87268
|
|
|
|
| |
Пост N: 6142
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.11.16 15:41. Заголовок: вроде вот так "?..
вроде вот так "[^\d][\.]?[^\d]"
|
|
|
|