Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 271

/ вопрос открыт /

Здравствуйте, эксперты!
Имеется некая строка. Из неё берётся часть, и если она - число, делать одно, а если нет, делать другое. На оба приведённых куска кода delphi матюгается. как поступить?

Приложение:
  1. begin
  2. Edit2.Text:=MidStr(Edit1.Text, 2, 2);
  3. try
  4. Edit3.Text:=IntToStr(StrToInt(Edit2.Text))
  5. except
  6. Edit3.Text:='not a number';
  7. end;
  8.  
  9. begin
  10. Edit2.Text:=MidStr(Edit1.Text, 2, 2);
  11. if VarIsNumeric(StrToInt(Edit2.Text))
  12. then Edit3.Text:=IntToStr(StrToInt(Edit2.Text))
  13. else Edit3.Text:='not a number';
  14. end;


AlphA Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: AlphA (статус: Посетитель)
Вопрос отправлен: 11 октября 2009, 14:48
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Егор

Здравствуйте, AlphA!
В вашем случае можно так, как в приложении - работать будет :)

Приложение:
  1. begin
  2. Edit2.Text:=Edit1.Text[2]+Edit1.Text[3];
  3. try
  4. Edit3.Text:=IntToStr(StrToInt(Edit2.Text))
  5. except
  6. Edit3.Text:='not a number';
  7. end;
  8. 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

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

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

AlphA (статус: Посетитель), 11 октября 2009, 15:27 [#8]:

Разобрался. Спасибо!

11 октября 2009, 18:28: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Алгоритмы, преобразования модератором Ерёмин А.А.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.04 сек.