Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Расскажите немного о команде TRY / 25 сообщений из 25, страница 1 из 1
14.02.2006, 13:30
    #33543417
Guest_125
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
Сабж коротенько.
...
Рейтинг: 0 / 0
14.02.2006, 14:00
    #33543536
Guest_125
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
Проблема у меня. Имеется таблица, у нее поля с именами (все поля не показываю, но часть из них):
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
14.02.2006, 14:12
    #33543585
Guest_125
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
Up!
...
Рейтинг: 0 / 0
14.02.2006, 14:14
    #33543591
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
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
14.02.2006, 14:17
    #33543603
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
TRY..... CATCH ... ENDTRY - это обратка исключительных ситуаций, т.е. ошибок, которые вы не можете предотвратить программным способом. Как правило такие ситуации возникают при обращении к внишним (по отношению к VFP) программным объектам (файлы, OLE ии пр.).
Все остальные ошибки (это мое мнение) надо предотвращать, а не реагировать на них в TRY.
Изложите вашу проблему. Я уверен, что ее можно решить не доводя до TRY(TYPE() и пр.)

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

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

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

С уважением, Алексей
...
Рейтинг: 0 / 0
14.02.2006, 15:01
    #33543786
Guest_125
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
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
14.02.2006, 15:21
    #33543886
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
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
14.02.2006, 15:21
    #33543889
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
Код: 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
14.02.2006, 15:39
    #33543952
Guest_125
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
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
14.02.2006, 15:44
    #33543983
Guest_125
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
Станислав C.Странно... А я всегда думал, что если в функцию VAL() передали строку из букв, то она возвращает не ошибку, а число 0... Я ошибался?!Ты прав, значит критерий
Код: plaintext
INT(VAL(SUBSTR(m.c_field, 2 )))
неправильный. Надо придумать что-то другое.
...
Рейтинг: 0 / 0
14.02.2006, 16:18
    #33544141
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
Код: plaintext
? ISDIGIT(SUBSTR('C123', 2 ))
...
Рейтинг: 0 / 0
14.02.2006, 16:34
    #33544191
Недоходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
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
15.02.2006, 06:41
    #33545118
Guest_125
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
Hi, PaulWist и Недоходящий !
Да, действительно можно и скорее всего нужно использовать функцию ISDIGIT() и проверять имя поля начиная со второго символа.
Спасибо всем!!!
Конечно вышел из ситуации. Но об идеологии команды TRY так и нерассказали.
...
Рейтинг: 0 / 0
15.02.2006, 12:36
    #33545928
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
Можно проще:

Код: 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
15.02.2006, 13:11
    #33546105
Guest_125
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
Класс! Спасибо ВладимирМ !
Вы не сможете ответить коротенько по самому сабжу. А то с английским туговато.
...
Рейтинг: 0 / 0
15.02.2006, 14:04
    #33546378
Guest_125
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
Я так оформил:
Код: 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
15.02.2006, 14:07
    #33546390
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
Вот перевод статьи HELP по TRY...CATCH (правда, для VFP8)

http://www.foxhelp.ru/TryCatchFinallyKomandaVFP8?v=pi1
...
Рейтинг: 0 / 0
15.02.2006, 14:08
    #33546398
Guest_125
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
Немного короче
Код: 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
15.02.2006, 14:17
    #33546439
Guest_125
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
ВладимирМВот перевод статьи HELP по TRY...CATCH (правда, для VFP8)

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

В ранних версиях FoxPro необходима симуляция при помощи настройки On Error
...
Рейтинг: 0 / 0
16.02.2006, 02:22
    #33547868
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
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
16.02.2006, 14:09
    #33549075
Guest_125
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расскажите немного о команде TRY
Спасибо Igor Korolyov! Вообще всем огромное спасибо.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Расскажите немного о команде TRY / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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