Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2010, 17:16   #1
igor_564
Пользователь
 
Аватар для igor_564
 
Регистрация: 05.12.2009
Сообщений: 52
По умолчанию Взятие обработки ошибок в свои руки (Паскаль).

Возможно ли обработка ошибок времени выполнения с помощью каких либо операторов? Хочу вот сделать чтобы программа адекватно реагировала на ошибки, а не вылетала, к примеру когда пользователя отчётливо просят ввести числовое значение, а он шлёпает буквы .
Нашёл вот в модуле Dos переменную DosError возвращающюю код ошибки Dos, но как пользоваться ей ума не приложу. Может как-то так ?
Код:
If DosError=1 Then WriteLn(' Файл не найден');
Но тупой вставкой такой записи меду другими операторами не обойдёшься! Или Вот ещё функция DosExitCode, "возвращающая код завершения выполняемого процесса". Все эти вещи нашёл я в учебнике, но как ими пользоваться там не написано.
Или может ошибки нельзя обрабатывать, а возможно только предотвращать?
Обьясните, пожалуйста, эти вещи на языке начинающего
igor_564 вне форума Ответить с цитированием
Старый 14.01.2010, 23:40   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Если вы запускаете из своей программы какую-нибудь другую по средством процедуры Exec('программа','параметры'), то затем можно посмотреть правильно ли отработала запущенная вами программа или вылетела (Если в переменной DosExitCode ноль, то всё произошло по плану, если нет, то была ошибка). Кстати, коды ошибок в разных операционных системах могут отличаться (проверено опытом).

DosError содержит код ошибки (0 если не было ошибки) после "несерьёзной" операций с файлами. Например, посмотрели аттрибуты несуществующего файла. Открытие несуществующего файла вызывает уже серьёзную ошибку, поэтому надо использовать переменную IOResult, предварительно установив диррективу компилятора {$I-}.

Вобщем почитайте про директивы компилятора, они позволяют перехватывать ошибки в ран-тайме, но будьте осторожны - они не всегда дают понять была ли ошибка или нет.
eoln вне форума Ответить с цитированием
Старый 14.01.2010, 23:55   #3
igor_564
Пользователь
 
Аватар для igor_564
 
Регистрация: 05.12.2009
Сообщений: 52
По умолчанию

Цитата:
Если вы запускаете из своей программы какую-нибудь другую по средством процедуры Exec('программа','параметры'), то затем можно посмотреть правильно ли отработала запущенная вами программа
К подпрограммам это можно отнести?
P. S. Cпасибо, а я как-то и забыл про директивы компилятора. Т. е. когда я отключаю какую-либо директиву компилятор перестаёт наблюдать за ошибками времени выполнения и я сам могу это сделать?
igor_564 вне форума Ответить с цитированием
Старый 15.01.2010, 00:43   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от igor_564 Посмотреть сообщение
К подпрограммам это можно отнести?
Нет, только к запуску внешнего файла.
Цитата:
Сообщение от igor_564 Посмотреть сообщение
компилятор перестаёт наблюдать за ошибками времени выполнения и я сам могу это сделать?
Не всегда, некоторые директивы в случае ошибок позволяют незавершать программу аварийно, но никак вам об этом не сообщают. Тут и кроется опасность.
Зачем вам именно Pascal, можно сделать консольное приложение в Delphi, ведь время DOS'a уже ушло

P.S В реальном времени компилятора уже и не будет.
eoln вне форума Ответить с цитированием
Старый 15.01.2010, 09:22   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

насколько я помню, единственный способ в TurboPascal как то обрабатывать ошибки - это отключать соотвествующие проверки через директивы компилятора (например, ошибки работы с файлами {$I-} {$I+} и обрбатывать ситуацию самостоятельно).

Но, похоже, в Вашем случае всё гораздо проще.
Посмотрите вот здесь:
Можно ли заставить программу не вылетать с ошибкой, если пользователь вместо целого числа введет, скажем, букву...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.01.2010, 12:17   #6
igor_564
Пользователь
 
Аватар для igor_564
 
Регистрация: 05.12.2009
Сообщений: 52
По умолчанию

Цитата:
ведь время DOS'a уже ушло
Ну, честно говоря я до Дельфи ещй не дошёл.
P. S. Извините за оффтоп но скажу: в том то и дело что ДОС уже давно стоит на месте, поэтому для обучения ПРИНЦИПАМ программирования лучше Паскаля не найти (ИМХО). А Windows постоянно движется вперёд (скачет).
И потом для меня создание программ именно на Паскале принципиально)). Один человек лопнул со смеху когда я спросил его можно ли делать 3D игры на нём. Между тем даже в некоторых учебниках есть темы программированию трёхмерной графики на этом языке. Мне почему-то кажется, что у Паскаля есть гораздо больше возможностей, чем думает большинство людей.
P. S. Блин теперь точно штрафанут.
igor_564 вне форума Ответить с цитированием
Старый 15.01.2010, 12:35   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

1) Всегда и повсюду ставьте защиту от дурака - запрет на ввод букв вместо цифр (проверяйте, проверяйте и еще раз проверяйте, что ввел юзверь).
2) В "критических" местах типа где открываем файл - СНАЧАЛА ПРОВЕРИЛИ ЕГО СУЩЕСТВОВАНИЕ. А то дал я товарищу по работе программу протестировать, которая создавала файл на секунду, потом из него читала и удаляла. Так он умудрился вызвать ERROR успев удалить файл.
3) Используем TRY.. EXCEPT для отлова ошибок.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взятие интеграла max38934 Общие вопросы Delphi 2 11.05.2009 16:03
программа обработки ведомости на зарплату на Паскаль Анжелика Помощь студентам 6 16.12.2008 16:55
как получить чужой комп в свои руки zetrix Безопасность, Шифрование 7 13.11.2008 16:32
Паскаль. Структуры и алгоритмы обработки данных Римма Паскаль, Turbo Pascal, PascalABC.NET 15 08.10.2007 14:58