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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2009, 14:37   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Try..except..problem

Проблема с использованием Try..Except:
Код:
If Pos('Покажи информацию номер', Say)=0 then
 Begin
  try
   Num:=StrToInt(Copy(Say,25,Length(Say)-25));

   AssignFile(F,CDir+'\U-CODE\'+IntToStr(Num)+'.txt');
   Reset(F);
   ReadLn(F,S);
   AddMemoString(S);
   CloseFile(F);
  except
   AddMemoString('Неправильно указан номер записи или записи с таким номером не существует');
  End;
 End;
Дело в том, что после ввода "Покажи информацию номер ф" он молчит в тряпочку. как изменить условие после Except? Лучше если разбить на два варианта - плохой номер(не цифра) и нет такой инфы. Если вопрос глупый - камнями не бросать. Использую try..except только второй раз в жизни.


P.S. Say - строка, которая вводится, AddMemoString - процедура вывода строки компьютером по виду напоминает печатную машинку. CDir - директория Num - номер требуемой инфы.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 29.06.2009, 14:42   #2
san72
Форумчанин
 
Регистрация: 04.06.2008
Сообщений: 102
По умолчанию

зачем тебе вообще там try except можно гораздо проще сделать:

If Pos('Покажи информацию номер', Say)=0
then begin
Num:=StrToInt(Copy(Say,25,Length(Sa y)-25));

AssignFile(F,CDir+'\U-CODE\'+IntToStr(Num)+'.txt');
Reset(F);
ReadLn(F,S);
AddMemoString(S);
CloseFile(F);

end
else AddMemoString('Неправильно указан номер записи или записи с таким номером не существует');
Keep it simple, stupid
san72 вне форума Ответить с цитированием
Старый 29.06.2009, 14:48   #3
san72
Форумчанин
 
Регистрация: 04.06.2008
Сообщений: 102
По умолчанию

и вообще какая логика я непонел, если строка "'Покажи информацию номер" не найдена то что-то считывается из файла а если найдена то "'Неправильно указан номер записи или записи с таким номером не существует" ????
Keep it simple, stupid
san72 вне форума Ответить с цитированием
Старый 29.06.2009, 15:25   #4
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Цитата:
зачем тебе вообще там try except
В таком коде обязательно нужна проверка на исключительную ситуацию.
Код я бы сделал код хотя-бы таким (хоть вложенные исключения и не очень хороши):
Код:
If Pos('Покажи информацию номер', Say)=0 then
 Begin
  try
   Num:=StrToInt(Copy(Say,25,Length(Say)-25));

   AssignFile(F,CDir+'\U-CODE\'+IntToStr(Num)+'.txt');
   try
    Reset(F);
    ReadLn(F,S);
    AddMemoString(S);
   finally
    CloseFile(F);
   end;
  except
   AddMemoString('Неправильно указан номер записи или записи с таким номером не существует');
  End;
 End;
А ошибка... Вы хотите проверять, существует ли строка, или не существует?
Если существует, то замените строчку:
Код:
If Pos('Покажи информацию номер', Say)<>0 then
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 29.06.2009, 16:30   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Опять не реагирует. Похоже придется рассматривать типы ошибок по on ... do. По-моему ошибка буквы вместо цифры - EConvertError, а открытия файла - EAccessViolation. Но до этого пробовал через типы ошибок и все равно ничего не добился.
Цитата:
А ошибка... Вы хотите проверять, существует ли строка, или не существует?
Нет
Цитата:
В таком коде обязательно нужна проверка на исключительную ситуацию.
. Тот же
Цитата:
"Покажи информацию номер ф"
тоже возможен.

По ходу нашел кое-что: В посе указывал нль вместо 1. теперь он игнорируя try..except выводит ошибку. Хоть что-то...
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 29.06.2009 в 17:22.
Alex Cones вне форума Ответить с цитированием
Старый 29.06.2009, 17:37   #6
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Поставь дополнительные проверки:

Код:
try
  if TryStrToInt(Copy(Say,25,Length(Say)-25), Num) then
  begin
    if FileExists(CDir+'\U-CODE\'+IntToStr(Num)+'.txt') then
    begin
      AssignFile(F,CDir+'\U-CODE\'+IntToStr(Num)+'.txt');
      Reset(F);
      ReadLn(F,S);
      AddMemoString(S);
      CloseFile(F);
    end
    else
      AddMemoString('Не найден файл записи');
  end
  else
    AddMemoString('Неправильно указан номер записи');
except
  AddMemoString('Неизвестная ошибка');
end;
Black Fregat вне форума Ответить с цитированием
Старый 29.06.2009, 18:17   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

О! Мысля! Не переводить N в интеджер, а оставить в стринге = проверка только файлекзистс и ни каких тру..екс.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Xanoy! with smol problem artush1984 Общие вопросы C/C++ 1 27.04.2009 23:51
Static Void Problem RIO Общие вопросы .NET 2 02.05.2008 16:52
Что делать..:(((много читать)Global problem! Elm0 Свободное общение 24 28.06.2007 18:13