| 
| 
 | Вопрос # 3 271/ вопрос открыт / | 
 |  Здравствуйте, эксперты!Имеется некая строка. Из неё берётся часть, и если она - число, делать одно, а если нет, делать другое. На оба приведённых куска кода delphi матюгается. как поступить?
 Приложение:Переключить в обычный режим begin Edit2.Text:=MidStr(Edit1.Text, 2, 2); try  Edit3.Text:=IntToStr(StrToInt(Edit2.Text)) except  Edit3.Text:='not a number'; end; begin Edit2.Text:=MidStr(Edit1.Text, 2, 2); if VarIsNumeric(StrToInt(Edit2.Text)) then Edit3.Text:=IntToStr(StrToInt(Edit2.Text)) else Edit3.Text:='not a number';end;
|  |   Вопрос задал: AlphA (статус: Посетитель)Вопрос отправлен: 11 октября 2009, 14:48
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Егор Здравствуйте, AlphA!В вашем случае можно так, как в приложении - работать будет :)
 Приложение:Переключить в обычный режим begin Edit2.Text:=Edit1.Text[2]+Edit1.Text[3]; try  Edit3.Text:=IntToStr(StrToInt(Edit2.Text)) except  Edit3.Text:='not a number'; end;end;
|  | Ответ отправил: Егор (статус: 10-ый класс)Время отправки: 11 октября 2009, 15:17
 
 |  
 Мини-форум вопросаВсего сообщений: 8; последнее сообщение — 11 октября 2009, 15:27; участников в обсуждении: 2. 
|   | Егор (статус: 10-ый класс), 11 октября 2009, 15:09 [#1]:как матюгается-то? что за ошибка? Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | Егор (статус: 10-ый класс), 11 октября 2009, 15:15 [#2]:правильно ругается - что за функция такая MidStr? Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | AlphA (статус: Посетитель), 11 октября 2009, 15:18 [#3]:В обоих случаях. Project Project1.exe raised exception class EConvertError with message ''di' is not valid integer value'. Process stopped. Use Step or Run to continue.
 |  
|   | Егор (статус: 10-ый класс), 11 октября 2009, 15:19 [#4]:а насчёт строчки 
 VarIsNumeric(StrToInt(Edit2.Text))всегда будет выдаваться true или вызываться исключение, потому что на вход подаётся всегда число (или ошибка возникает при преобразовании). Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | AlphA (статус: Посетитель), 11 октября 2009, 15:21 [#5]:MidStr (модуль StrUtils). function MidStr(const AText: AnsiString; const AStart, ACount: Integer): AnsiString; overload;
 begin
 Result := Copy(WideString(AText), AStart, ACount);
 end;
 
 function MidStr(const AText: WideString; const AStart, ACount: Integer): WideString; overload;
 begin
 Result := Copy(AText, AStart, ACount);
 end;
 |  
|   | Егор (статус: 10-ый класс), 11 октября 2009, 15:23 [#6]:нажимаем тогда Run - это дельфи перехватывает исключение. 
 для первого кода - нормальная реакция. в готовой программе это сообщение выскакивать (в ДАННОМ случае) не будет.
 
 для второго кода - тоже нормальная реакция на ошибку - у вас строка принудительно преобразуется в число (даже если там числа и нет):
 
  if VarIsNumeric(StrToInt(Edit2.Text))
                --------можно просто написать:
 
  if VarIsNumeric(Edit2.Text) но это не поможет для решения задачи (см. объяснение выше)
 Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | Егор (статус: 10-ый класс), 11 октября 2009, 15:26 [#7]:тогда: 
 begin
 Edit2.Text:=MidStr(Edit1.Text, 2, 2);
 try
  Edit3.Text:=IntToStr(StrToInt(Edit2.Text))
 except
  Edit3.Text:='not a number';
 end;
end; дельфи будет ругаться
 ---------
 Project Project1.exe raised exception class EConvertError with message ''di' is not a valid integer value'. Process stopped. Use Step or Run to continue.
 ---------
 нажимаем Run и пользуемся программой дальше
 Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | AlphA (статус: Посетитель), 11 октября 2009, 15:27 [#8]:Разобрался. Спасибо! |  11 октября 2009, 18:28: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Алгоритмы, преобразования модератором Ерёмин А.А. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |