Вопрос № 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;
Отвечает: Ерёмин Андрей Андреевич
Здравствуйте, Лука!
1) Не совсем уверен, что можно, но почему бы не подключать модули через uses? А вообще, жаловаться на то, что код программы очень большой - неверно. В моих программах по 4, 5 тысяч строк и всё нормально, ориентируюсь. Так что рекомендую вообще этим не заниматься и привыкать к весомым модулям.
2) Думаю, проще всего вставить это в try ... except. Например, так:
S:=Edit1.Text;
try
A:=StrToFloat(S);
except
Abort;
ShowMessage('Невозможно преобразовать строку в число.');
end;
Отвечает: 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.
Отвечает: 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