powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблеммка
18 сообщений из 18, страница 1 из 1
Проблеммка
    #35616585
Nikita_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Специалисты! выведете из затруднения

n_form=''
n_form=00254

Local kv_o,kvlo1

kvlo=Len(ALLTRIM(n_form))
kvlo1=val(n_form)
kv_o=Len(ALLTRIM(STR(kvlo1)))


kv_o - дает 3, т.е. выкидывает 1-е 2 ноля
как правильно организовать чтобы результат был 5, т.е. подсчитывлись все знаки
...
Рейтинг: 0 / 0
Проблеммка
    #35616603
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не переводить строку в число. Как же еще.

Откуда FoxPro вообще узнает, что у числа 254 должны быть какие-то ведущие нули? И почему этих нулей должно быть ровно 2, а не 3 или 4?

Либо опиши всю задачу целиком, а не принятый способ решения. Почему возникла необходимость переводить строковую величину в число, а потом анализировать именно переведенное, а не исходное значение?
...
Рейтинг: 0 / 0
Проблеммка
    #35616640
FAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nikita_2Специалисты! выведете из затруднения

n_form=''
n_form=00254

Local kv_o,kvlo1

kvlo=Len(ALLTRIM(n_form))
kvlo1=val(n_form)
kv_o=Len(ALLTRIM(STR(kvlo1)))


kv_o - дает 3, т.е. выкидывает 1-е 2 ноля
как правильно организовать чтобы результат был 5, т.е. подсчитывлись все знаки

1. А вообще откуда должно взяться такое число 00254 ?
Посмотри, что в переменной n_form находится - 254, без ведущих нулей.
2. Задача в чем? Просто убедиться, что ведущие нули система не хранит? Тогда считай, что случилось ))
...
Рейтинг: 0 / 0
Проблеммка
    #35616649
Nikita_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в том что:
номера бланков строгой отчетности начинаются с 0, 00254785, 00254786 и т.д.
при заполнении бланка на компе номер бланка вставляется в ручную, (перем. n_form (С),
походу рботы заметил что иногода пользователи второпях печатают что-то вроде 002в547786
т.е номер с ошибкой, вот и решил проконтролировать корректность ввода следующим образом:


kvlo=Len(ALLTRIM(n_form))
kvlo1=val(n_form)
kv_o=Len(ALLTRIM(STR(kvlo1)))

if kvlo<>kv_o
messagebox('Не корректный номер документа. ')
return
endif

т.е при проверке kvlo не должно быть = kv_o, в принципе все работает, кабы не было впереди нолей.
Понимаю что профи как то по другому решают эту задачу, сам не программист , скажем любитель
и тем не менее...?
...
Рейтинг: 0 / 0
Проблеммка
    #35616653
Nikita_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"т.е при проверке kvlo не должно быть = kv_o, в принципе........"

ошибся читать как "т.е при проверке kvlo должно быть = kv_o, в принципе........" далее по тексту
...
Рейтинг: 0 / 0
Проблеммка
    #35616696
FAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так поле-то у тебя строковое. А значит, его перед сохранением и надо проверять, пока оно не стало числом.
...
Рейтинг: 0 / 0
Проблеммка
    #35616698
FAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nikita_2Дело в том что:
номера бланков строгой отчетности начинаются с 0, 00254785, 00254786 и т.д.
при заполнении бланка на компе номер бланка вставляется в ручную, (перем. n_form (С),
kvlo1=val(n_form)


Это убери и все.
...
Рейтинг: 0 / 0
Проблеммка
    #35616708
Nikita_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо, пойдем другим путем :
как проверить строковое поле содержащее цифры на наличие нецифровых символов?
...
Рейтинг: 0 / 0
Проблеммка
    #35616806
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nikita_2Хорошо, пойдем другим путем :
как проверить строковое поле содержащее цифры на наличие нецифровых символов?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
lcCifra = '12345'

llNumer = .T.
for i =  1  to len(lcCifra)
   if !isdigit(substr(lcCifra, i,  1 ))
     llNumer = .F.
     exit
  endif
endfor

if llNumer
  ? 'Цифры'
else
  ? 'Буквы'
endif
...
Рейтинг: 0 / 0
Проблеммка
    #35616808
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
MyString='455885A74 2'
?LEN(ALLTRIM(CHRTRAN(MyString, '0123456789', '          ')))
...
Рейтинг: 0 / 0
Проблеммка
    #35616812
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно проще:
Код: plaintext
1.
2.
3.
4.
5.
6.
lcCifra = '12345'

if empty(chrtran(lcCifra, '1234567890', ''))
  ? 'Цифры'
else
  ? 'Буквы'
endif
...
Рейтинг: 0 / 0
Проблеммка
    #35616837
Nikita_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Впредь дурачине наука. (Это я себе).
...
Рейтинг: 0 / 0
Проблеммка
    #35617073
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Dag
> MyString='455885A74 2'
> ?LEN(ALLTRIM(CHRTRAN(MyString, '0123456789', ' ')))

Пробелы, вопрошающему, я так понимаю, тоже не нужны


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблеммка
    #35617075
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Dima T
> Можно проще:
>
> lcCifra = '12345'
>
> if empty(chrtran(lcCifra, '1234567890', ''))
> ? 'Цифры'
> else
> ? 'Буквы'
> endif


Те же пробелы.
Думаю, вместо empty? правильнее использовать lcCifra==''. Конечно сначала
нужно убрать ведущие, пробелы:


lcCifra = '12345'



lcCifra=alltrim(lcCifra)

if (chrtran(lcCifra, '1234567890', ''))==''
? 'Цифры'
else
? 'Не (только) цифры'
endif


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблеммка
    #35617823
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проще при наборе проверять последний введеный символ
если не корректный - удалять и менять текущиию позицию каретки в поле ввода
причем поскольку провяряются цифры которые в таблице символов лежат рядом один за одним
достаточно проверить на больше - меньше "0" и "9"
...
Рейтинг: 0 / 0
Проблеммка
    #35617867
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> проще при наборе проверять последний введеный символ
> если не корректный - удалять и менять текущиию позицию каретки в поле
> ввода
> причем поскольку провяряются цифры которые в таблице символов лежат
> рядом один за одним
> достаточно проверить на больше - меньше "0" и "9"

Ну если мы говорим о контроль при вводе - то проще задать маску ввода
99999999 и не нужно сравнивать на больше меньше.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблеммка
    #35900242
Фотография Saller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Galyamov Rinat
> проще при наборе проверять последний введеный символ
> если не корректный - удалять и менять текущиию позицию каретки в поле
> ввода
> причем поскольку провяряются цифры которые в таблице символов лежат
> рядом один за одним
> достаточно проверить на больше - меньше "0" и "9"

Ну если мы говорим о контроль при вводе - то проще задать маску ввода
99999999 и не нужно сравнивать на больше меньше.




Как по мне - самый правильный ответ!
...
Рейтинг: 0 / 0
Проблеммка
    #35900703
GermanGM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну разве что дополнить следующим:
установить для поля ввода св-во Format "K" и LostFocus() event что-то типа:

Код: plaintext
1.
this.value=padl(allt(this.value),len(this.inputmask),'0')
this.refresh

, что избавит от необходимости ввода лидирующих нулей
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблеммка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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