powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Расскажите немного о команде TRY
25 сообщений из 25, страница 1 из 1
Расскажите немного о команде TRY
    #33543417
Guest_125
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сабж коротенько.
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33543536
Guest_125
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема у меня. Имеется таблица, у нее поля с именами (все поля не показываю, но часть из них):
Crcode, C199801, C199802, ...
не я создавал таблицу, но взять данные необходимо.
Мне нужно просматривать значения полей C199801, C199802, ...
Думаю это сделать через
TRY
ENDTRY
???
Пустил тестовый пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CLEAR
TRY
  m.n_1 =  5 / 0 
CATCH
  m.n_1 =  0 
  EXIT
FINALLY 
  m.n_1 =  1 
ENDTRY
?m.n_1
Результат 1
А мне надо чтобы был выход по EXIT.
Вот и прошу расскажите немного о TRY ???
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33543585
Guest_125
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Up!
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33543591
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest_125Проблема у меня. Имеется таблица, у нее поля с именами (все поля не показываю, но часть из них):
Crcode, C199801, C199802, ...
не я создавал таблицу, но взять данные необходимо.
Мне нужно просматривать значения полей C199801, C199802, ...
Думаю это сделать через
TRY
ENDTRY
???
Пустил тестовый пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CLEAR
TRY
  m.n_1 =  5 / 0 
CATCH
  m.n_1 =  0 
  EXIT
FINALLY 
  m.n_1 =  1 
ENDTRY
?m.n_1
Результат 1
А мне надо чтобы был выход по EXIT.
Вот и прошу расскажите немного о TRY ???
К сожалению, отошел в последнее время от FoxPro в сторону С++... Но немного могу рассказать по сабжу (на основе С-шных знаний).
Операторным блоком TRY-CATCH-FINALLY окружают группу операторов, выполнение которых может спровоцировать ошибку. При этом операторы в блоке FINALLY выполняются ВСЕГДА(!), при любом раскладе (не важно, произошла или нет ошибка)! Так что, после выполнения инструкций из CATCH'a ты переместишься в блок FINALLY, а не на оператор ?m.n_1.
Если тебе нужен выход по CATCH - просто убери блок FINALLY.
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33543603
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TRY..... CATCH ... ENDTRY - это обратка исключительных ситуаций, т.е. ошибок, которые вы не можете предотвратить программным способом. Как правило такие ситуации возникают при обращении к внишним (по отношению к VFP) программным объектам (файлы, OLE ии пр.).
Все остальные ошибки (это мое мнение) надо предотвращать, а не реагировать на них в TRY.
Изложите вашу проблему. Я уверен, что ее можно решить не доводя до TRY(TYPE() и пр.)

С уважением, Алексей
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33543660
Guest_125
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi, Станислав C.
Спасибо за разъяснение про FINALLY

Aleksey-K...Изложите вашу проблему. Я уверен, что ее можно решить не доводя до TRY(TYPE() и пр.)
Может быть действительно вверху я плохо объяснил свою ситуацию.

Имеется таблица, у нее поля с именами (все поля не показываю, но часть из них):
Crcode, C199801, C199802, ...
не я создавал таблицу, но взять данные необходимо. И переложить на сервер в другом более правильном порядке.
Мне нужно просматривая записи пробежаться по полям и выбирать данные только у полей имена которых начинаются с символа "C" а дальше числовое значение типа C199801, C199802, ... Но в таблице имеются поля которые тоже начинаются с символа "C", например Crcode, то это поле должно пропускаться и не обрабатываться. Имеют место и другие поля, но имена их начинаются с других символов.
Если что-то непонято могу ответить на вопросы.
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33543692
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда проще всего через TYPE
IF TYPE("C199801") = "N"
....
ENDIF

С уважением, Алексей
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33543786
Guest_125
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey-KНу тогда проще всего через TYPE
IF TYPE("C199801") = "N"
....
ENDIF
Извини, видимо я опять плохо объяснил. Мне нужно рассматривать все поля, имена которых начинаются с символа "C" а дальше число.
Типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
FOR i =  1  TO FCOUNT("Alias")
  m.c_field = FIELD(i,"Alias")
  IF LEFT(m.c_field, 1 ) = "C"
* вот здесь еще контроль что со второго символа имя поля состоит из цифр
* и тогда я значения этих полей буду рассматривать
......
  ENDIF
ENDFOR
Может быть какая нибудь и другая идея.
Код: plaintext
1.
2.
3.
4.
IF BETWEEN(ASC(SUBSTR(m.c_field, 2 , 1 )),ASC("0"),ASC("9"))
  ?"Да, продолжение символы чисел..."
ELSE
  ?"Нет, это поле рассматриваться небудет..."
ENDIF
Но дальше надо третий символ проверять, а за ним и четвертый.
Я думал осуществлять проверку через TRY
Код: plaintext
INT(VAL(SUBSTR(m.c_field, 2 )))
Вот если это выражение даст ошибку значит это поле не рассматривается. А если без ошибок, то я его рассматриваю, обрабатываю и т.д.
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33543886
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest_125 Aleksey-KНу тогда проще всего через TYPE
IF TYPE("C199801") = "N"
....
ENDIF
Извини, видимо я опять плохо объяснил. Мне нужно рассматривать все поля, имена которых начинаются с символа "C" а дальше число.
Типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
FOR i =  1  TO FCOUNT("Alias")
  m.c_field = FIELD(i,"Alias")
  IF LEFT(m.c_field, 1 ) = "C"
* вот здесь еще контроль что со второго символа имя поля состоит из цифр
* и тогда я значения этих полей буду рассматривать
......
  ENDIF
ENDFOR
Может быть какая нибудь и другая идея.
Код: plaintext
1.
2.
3.
4.
IF BETWEEN(ASC(SUBSTR(m.c_field, 2 , 1 )),ASC("0"),ASC("9"))
  ?"Да, продолжение символы чисел..."
ELSE
  ?"Нет, это поле рассматриваться небудет..."
ENDIF
Но дальше надо третий символ проверять, а за ним и четвертый.
Я думал осуществлять проверку через TRY
Код: plaintext
INT(VAL(SUBSTR(m.c_field, 2 )))
Вот если это выражение даст ошибку значит это поле не рассматривается. А если без ошибок, то я его рассматриваю, обрабатываю и т.д.
Странно... А я всегда думал, что если в функцию VAL() передали строку из букв, то она возвращает не ошибку, а число 0... Я ошибался?!
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33543889
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
LOCAL MyName, MyField( 2 )
MyName = 'C123'

MyField( 1 ) = 'C234'
MyField( 2 ) = 'C123'

FOR i =  1  TO ALEN(MyField)
? LIKE(MyName, MyField(i))
ENDFOR 
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33543952
Guest_125
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
LOCAL MyName, MyField( 2 )
MyName = 'C123'

MyField( 1 ) = 'C234'
MyField( 2 ) = 'C123'

FOR i =  1  TO ALEN(MyField)
? LIKE(MyName, MyField(i))
ENDFOR 

Мне нуно найти не именно поле с каким-то именем. А анализировать ВСЕ поля начинающиеся с символа "C" , а со второго символа цифры. Типа: C199801.
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33543983
Guest_125
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав C.Странно... А я всегда думал, что если в функцию VAL() передали строку из букв, то она возвращает не ошибку, а число 0... Я ошибался?!Ты прав, значит критерий
Код: plaintext
INT(VAL(SUBSTR(m.c_field, 2 )))
неправильный. Надо придумать что-то другое.
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33544141
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
? ISDIGIT(SUBSTR('C123', 2 ))
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33544191
Недоходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Guest_125

Попробуй так:
p_str = "C199801"
if AT("C",p_str) = 1 then
p_str_t = SUBSTR("C123",2,LEN("C123"))
for n_count = 1 to LEN(p_str_t)
p_type = ISDIGIT(SUBSTR('123',n_count))
if p_type= .f. then
=Messagebox("Неподходит!!!!")
exit
endif
next n_count
endif
if p_type= .t. then
=Messagebox("YES,YES,YES!!!! ЦЭ ВОНО!!!!")
endif
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33545118
Guest_125
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi, PaulWist и Недоходящий !
Да, действительно можно и скорее всего нужно использовать функцию ISDIGIT() и проверять имя поля начиная со второго символа.
Спасибо всем!!!
Конечно вышел из ситуации. Но об идеологии команды TRY так и нерассказали.
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33545928
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно проще:

Код: plaintext
1.
2.
3.
4.
5.
6.
LOCAL lcFieldName
lcFieldName = "C132456"

IF LEN(m.lcFieldName)> 1  AND ChrTran(m.lcFieldName,"0123456789","")=="C"
* Имя этого поля начинается с буквы "C" и далее идут одни цифры
ENDIF

Поскольку имя поля не может начинаться с цифры, то можно не учитывать такую ситуацию и заменять все цифры на пустую строку. Надо только проконтролировать что все имя не состоит из одной буквы "C"
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33546105
Guest_125
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Класс! Спасибо ВладимирМ !
Вы не сможете ответить коротенько по самому сабжу. А то с английским туговато.
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33546378
Guest_125
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так оформил:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
LOCAL lcFieldName, m.llKey
m.lcFieldName = "C132716"
m.llKey = .f.
IF LEFT(m.lcFieldName, 1 )="C" AND LEN(m.lcFieldName)> 2 
  FOR i= 2  TO LEN(m.lcFieldName)
    IF !ISDIGIT(SUBSTR(m.lcFieldName,i, 1 ))
      m.llKey = .f.
      EXIT
    ELSE
      m.llKey = .t.
    ENDIF
  ENDFOR
  IF m.llKey
    ? "Имя этого поля начинается с буквы 'C' и далее идут одни цифры"
  ELSE
    ?"Нет!!!"
  ENDIF
ELSE
  ?"Нет!!!"
ENDIF
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33546390
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот перевод статьи HELP по TRY...CATCH (правда, для VFP8)

http://www.foxhelp.ru/TryCatchFinallyKomandaVFP8?v=pi1
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33546398
Guest_125
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного короче
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CLEAR
LOCAL lcFieldName, m.llKey
m.lcFieldName = "C132756"
m.llKey = .t.
IF LEFT(m.lcFieldName, 1 )="C" AND LEN(m.lcFieldName)> 2 
  FOR i= 2  TO LEN(m.lcFieldName)
    IF !ISDIGIT(SUBSTR(m.lcFieldName,i, 1 ))
      m.llKey = .f.
      EXIT
    ENDIF
  ENDFOR
  IF m.llKey
    ? "Имя этого поля начинается с буквы 'C' и далее идут одни цифры"
  ELSE
    ?"Нет!!!"
  ENDIF
ELSE
  ?"Нет!!!"
ENDIF
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33546439
Guest_125
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМВот перевод статьи HELP по TRY...CATCH (правда, для VFP8)

http://www.foxhelp.ru/TryCatchFinallyKomandaVFP8?v=pi1
Спасибо ВладимирМ, буду разбираться.
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33547617
332_john
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Try есть в 7 fox'e?
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33547628
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
332_johnTry есть в 7 fox'e?
Нет. Была введена только в версии VFP8.

В ранних версиях FoxPro необходима симуляция при помощи настройки On Error
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33547868
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Guest_125!

TYPE(SUBSTR(m.c_field, 2, 6)) = "N"
Будет .T. если символы имени со 2-го по 7-й это цифры (но имя может быть
короче 7-ми символов!). Конечно там-же может быть "ведущий" пробел,
точка/запятая и минус/дефис - но я сомневаюсь что в имени поля это
встретится :)
Чуть более строгая проверка:
SUBSTR(m.c_field, 2, 6) = STR(VAL(SUBSTR(m.c_field, 2, 6)), 6)
Тут будет проверена и длинна имени (если имя короче чем 7 символов, то будет
возвращено .F.) - тут тоже будет неверный ответ если есть "ведущие" пробелы
(т.е. если проверяется строка типа "C 12345") - но для имён полей в dbf это
маловероятно.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Расскажите немного о команде TRY
    #33549075
Guest_125
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Igor Korolyov! Вообще всем огромное спасибо.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Расскажите немного о команде TRY
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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