:: Visual Foxpro, Foxpro for DOS
Re: Как сделать меню в FoxPRO DOS?
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Simple777
Ydin
spinz - это медстрах? Или я не прав.

В Скрижали, штоле?
Логическим можно ответить? .T. или .F.
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Ydin
мне туда вернуться уже не светит, а чувствую - это будущее...

Назад, в будущее!.. :bi:
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Ydin
Simple777
Ydin
spinz - это медстрах? Или я не прав.

В Скрижали, штоле?
Логическим можно ответить? .T. или .F.

Тут больше подошло бы .NULL. , но таки да.
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
TheGodMode
Автор

Сообщений: 77
Дата регистрации: 19.12.2017
Simple777
Хорошим этот способ не назовешь, но для практики или лабы покатит.
Ну вот смотри, обернул и все равно не выходит из процедуры.
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Если используется команда PROMT, то ON ESCAPE работает иначе. Надо в процедуру добавить CASE N=0.
Если будет нажата клавиша ESCAPE, то N будет равно 0.
Вообще PROMPT тоже не очень хорошая команда, но в FPD 1.1 видимо, другого и не было.
Ratings: 0 negative/1 positive
Re: Как сделать меню в FoxPRO DOS?
TheGodMode
Автор

Сообщений: 77
Дата регистрации: 19.12.2017
А как считать с клавиатуры не цифры а буквы?

Если так считывает цифры:
Roklad=0
@ 2,10 TO 4,50 DOUBLE
@ 3,11 SAY "Поиск людей по окладу"
@ 4,10 TO 10,50 DOUBLE
@ 5,11 SAY "Введите оклад:" get Roklad
Read

То так не считывает буквы, а просто пропускает данные строчки:

Roklad=""
@ 2,10 TO 4,50 DOUBLE
@ 3,11 SAY "Поиск людей по окладу"
@ 4,10 TO 10,50 DOUBLE
@ 5,11 SAY "Введите оклад:" get Roklad
Read



Исправлено 1 раз(а). Последнее : TheGodMode, 08.01.18 16:14
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
У команды @ X,Y GET есть еще опции PICTURE.

Если надо вводить, например, только цифры, то пишут так:

@ X,Y GET myvar PICTURE '9999'
READ

Если надо вводить и буквы и цифры, то:

@ X,Y GET myvar PICTURE 'XXXX'
READ

Есть и другие функции в опции PICTURE
Ratings: 0 negative/1 positive
Re: Как сделать меню в FoxPRO DOS?
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Кстати, про печать. Если в FPD 1 есть перехват клавиш (ON KEY [LABEL]), то можно сделать примерно так (дать возможность по горячей клавише напечатать этот файл):

...
ON KEY DO MyPrint WITH parFILE
MODI FILE (parFILE)
ON KEY
...
PROC MyPrint
PAPAM parFILE
x = INKEY()
IF NOT x=код горячей клавиши, на которую назначена печать
RETURN
ENDIF
...печать файла parFILE
RETURN
Ratings: 0 negative/1 positive
Re: Как сделать меню в FoxPRO DOS?
TheGodMode
Автор

Сообщений: 77
Дата регистрации: 19.12.2017
Simple777
Если надо вводить и буквы и цифры, то:

@ X,Y GET myvar PICTURE 'XXXX'
READ

Ну вот я хочу сделать поиск фамилий по первой букве, пытаюсь сделать так но ничего не выходит



Исправлено 2 раз(а). Последнее : TheGodMode, 08.01.18 17:58
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
DO While !eof() && это зачем? Раньше чем LOCATE не надо проверять!
LOCATE FOR UPPER(LEFT(Famil,LEN(RFamil))) == UPPER(RFamil)
IF FOUND() && Найдено
k=k+1
DO Vivod
k=k+1
@ROW+k,1 SAY replicate('-',115)
ENDIF
if !eof()
skip
endif
enddo
замени DO WHILE на SCAN FOR
SCAN FOR UPPER(LEFT(Famil,LEN(RFamil))) == UPPER(RFamil)
k=k+1
DO Vivod
k=k+1
@ROW+k,1 SAY replicate('-',115)
endSCAN

а перед этим SCAN предварительно проверь наличие записей, чтобы зря шапку в файл не выводить
LOCATE FOR UPPER(LEFT(Famil,LEN(RFamil))) == UPPER(RFamil)
IF NOT FOUND() && Не Найдено
* тут чтото сообщить на экране, что нет с такими буквами фамилий
RETURN
ENDIF



Исправлено 2 раз(а). Последнее : of63, 08.01.18 18:22
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
TheGodMode
LOCATE FOR UPPER(LEFT(Famil,LEN(RFamil))) == UPPER(RFamil)

Насчет функции UPPER. Наверняка она не работает для кириллицы - в версии FPD 1.1 не было поддержки национальных кодовых страниц.

Поэтому следует для преобразования использовать функцию CHRTRAN(), где в качестве второго аргумента будет строка символов из всех маленьких букв кириллицы, а в качестве третьего аргумента - все большие буквы. Типа так:

rfamil1=CHRTRAN(rfamil,'абвгд...','АБВГД...')

rfamil2=CHRTRAN(famil,'абвгд...','АБВГД...')

И я бы выполнял поиск так (чтобы не заморачиваться, как там работает "==" и какая установка активна у SET EXAC)

Locate for SUBSTR(rfamil1,1,1)=SUBSTR(rfamil2,1,1)



Исправлено 1 раз(а). Последнее : Simple777, 08.01.18 18:21
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
of63
замени DO WHILE на SCAN FOR

Я вот не уверен, что в FPD 1.1 была конструкция SCAN FOR
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
LOCATE то работает, а SCAN - не один ли ...код?

Ну, если нет, то он там опть что-то со SKIP пишет... не проникся парой LOCATE - CONTINUE ...

Хелп надо бы на этот FPD 1...

Точно про CHRTRAN(rfamil,'абвгд...','АБВГД...') подметил! Записать ее в виде подпрограммы RuUPPER и пользовать вместо UPPER.



Исправлено 3 раз(а). Последнее : of63, 08.01.18 18:30
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Да, надо использовать не SKIP, а CONTINUE (после успешного LOCATE)
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
of63
Точно про CHRTRAN(rfamil,'абвгд...','АБВГД...') подметил! Записать ее в виде подпрограммы RuUPPER и пользовать вместо UPPER.

Не поверишь, но такая функция в индексном выражении позволяет использовать MACHINE как COLLATE (Надеюсь, ИК не прибьет за такое смелое заявление )
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Непонятно, как FPD 1 видит русские символы ASC()>127? Они для него как буквы? Или как не буквы?
Почему фокс не ругается, что какие-то символы непонятные. Что вернет от них ISALPHA() если такая ф-ия есть... Хотя какая фоксу разница, что за символы в строках (данных)...
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
of63
Непонятно, как FPD 1 видит русские символы ASC()>127? Они для него как буквы? Или как не буквы?
Почему фокс не ругается, что какие-то символы непонятные. Что вернет от них ISALPHA() если такая ф-ия есть... Хотя какая фоксу разница, что за символы в строках (данных)...

На FPD 1.1 не работал вааще-та. Но думаю, что нормально он видит русские буквы. Символы берутся из дополнительной кодовой страницы MS-DOS. А вот преобразовывать вторую половину таблицы FPD 1.1 точно не может.



Исправлено 1 раз(а). Последнее : Simple777, 08.01.18 18:43
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
Ytuzov

Сообщений: 944
Откуда: Нижний Новгород
Дата регистрации: 17.05.2005
of63
Хелп надо бы на этот FPD 1...
Для 1.02 drive.google.com
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
akvvohinc

Сообщений: 4202
Откуда: Москва
Дата регистрации: 11.11.2008
Когда не было UPPER() для русских букв, то обычно пользовались SYS(15), а не CHRTRAN().
Так удобнее - один раз определяешь глобальную переменную со всеми символами и пользуешься.
То есть, фактически задается только 2 параметра - что перекодировать и таблица перекодировки, а не 3, как для CHRTRAN().
Ratings: 0 negative/0 positive
Re: Как сделать меню в FoxPRO DOS?
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Ytuzov
of63
Хелп надо бы на этот FPD 1...
Для 1.02 drive.google.com
О! Спасибо.

2Simple. SCAN там c FOR-ом
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 14 alex;  (Гостей: 13)

© 2000-2024 Fox Club 
Яндекс.Метрика