Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 120
от 13.05.2005, 09:20

Администратор:Калашников О.А.
В номере:Вопросов: 1, Ответов: 5


Вопрос № 20569: Мир Вам, уважаемые эксперты. 1. Такой вот вопрос: Слишком разросся код программы, всвязи с чем я разбил текст на несколько кусков и подключаю их через {$INCLUDE файл}. Нельзя ли сделать так, чтобы при открытии проекта эти файлы тоже сразу...

Вопрос № 20569
Мир Вам, уважаемые эксперты.
1. Такой вот вопрос:
Слишком разросся код программы, всвязи с чем я разбил текст на несколько кусков и подключаю их через {$INCLUDE файл}.
Нельзя ли сделать так, чтобы при открытии проекта эти файлы тоже сразу открывались, а то утомляет добавлять их каждый раз (их уже 5 штук, а будет больше). Или может есть другой способ разбить код на несколько файлов ?
2. Есть строка, которая через StrToFloat переводится в число. Но там может оказаться какая-нибудь фигня и программа вылетет с ошибкой. Можно ли как-нибудь до преобразования проверить: можно ли преобразовывать строку или нет?
Заранее благодарен.
Отправлен: 08.05.2005, 09:11
Вопрос задал: Лука (статус: Посетитель)
Всего ответов отправлено: 5

Отвечает: Bochvarov NikB
Здравствуйте, Лука!
1. Если твои юнити (unit) больюе 1000 lines надо подумать о организации програму(e?). Include ето оченx стрии метод и не для делфи.
2. SysUtils
function TextToFloat(Buffer: PChar; var Value; ValueType: TFloatValue): Boolean;
Ответ отправил: Bochvarov NikB (статус: 3-ий класс)
Отправлен: 08.05.2005, 10:29
Оценка за ответ: 4
Комментарий оценки:
1) Да я как раз и спрашиваю, как ее организовать по-проще...
2) Я искал как раз что-то в этом роде, но работает эта функция как-то странно.

Отвечает: Ерёмин Андрей Андреевич
Здравствуйте, Лука!
1) Не совсем уверен, что можно, но почему бы не подключать модули через uses? А вообще, жаловаться на то, что код программы очень большой - неверно. В моих программах по 4, 5 тысяч строк и всё нормально, ориентируюсь. Так что рекомендую вообще этим не заниматься и привыкать к весомым модулям.
2) Думаю, проще всего вставить это в try ... except. Например, так:
S:=Edit1.Text;
try
A:=StrToFloat(S);
except
Abort;
ShowMessage('Невозможно преобразовать строку в число.');
end;
Ответ отправил: Ерёмин Андрей Андреевич (статус: 1-ый класс)
Отправлен: 08.05.2005, 12:28
Оценка за ответ: 4
Комментарий оценки:
1) Не могу согласиться. Хорошо, пусть можно научиться работать с кодом в 5 тысяч, а когда он разростется до 50-и ? uses-ы интуитивно понятны, когда в программе несколько форм, а как с их помощью просто вырвать часть кода из основной программы я разобраться не смог :(, может и вообще нельзя...
2) Рсключения это конечно хорошо, РЅРѕ СЏ надеялся может есть специальная функция для проверки...
P.S. Abort нужно поменять местами с ShowMessage, чтобы работало.

Отвечает: John Freeman
Здравствуйте, Лука!
1)Разбей по человечески - на юниты, а дальше держишь control и щёлкаешь на имени юнита в uses.
2)Нет, только своими методами, а что try..except кто-то отменял?
Ответ отправил: John Freeman (статус: Профессор)
Отправлен: 08.05.2005, 14:21
Оценка за ответ: 4
Комментарий оценки:
Да не получается, что-то по человечески :(
(Кстати по ctrl+enter includ-файлы тоже открываются)

Отвечает: Malish
Здравствуйте, Лука!
При ошибке конвертации StrToFloat выдает сообщение об ошибке EConvertError поэтому логично его отловить, например так:
const
LF = #10;
try
Temp := StrToFloat(Edit1.Text);
except
on E: EConvertError do
ShowMessage(E.ClassName + LF + E.Message);
или простым дедовским методом (как в школе учили)
for i:=1 to Length(S) do
if (S[i]<48) or (S[i]>57) then
flag := false;
А потом делать конвертацию, если flag = true.
Ответ отправил: Malish (статус: Студент)
Отправлен: 08.05.2005, 14:23
Оценка за ответ: 4
Комментарий оценки:
РЎ исключениями РІСЃРµ понятно, Р° РІРѕС‚ дедовский метод РЅРµ подойдет -- мало ли РІ каком формате число. (12.34Р∙-2)

Отвечает: Boriss
Здравствуйте, Лука!
2) в модуле SysUtils есть несколько функций для решения такой проблемы:
function TryStrToInt(const S: string; out Value: Integer): Boolean;
function StrToIntDef(const S: string; Default: Integer): Integer;
function StrToInt64Def(const S: string; const Default: Int64): Int64;
function TryStrToInt64(const S: string; out Value: Int64): Boolean;
ну и конечно то, что писали вам о try ... except
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 12.05.2005, 14:07


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться

В избранное