Форум: "Начинающим";
Текущий архив: 2011.04.10;
Скачать: [xml.tar.bz2];
Внизвызвать B из A Найти похожие ветки
← →
начинающий1993 (2011-01-11 16:26) [0]как можно в процедуре A вызвать процедуру B, которая объявлена позже. Можно ли обойтись без объявления перед используемой процедурой.
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure A;
begin
B;
end;
procedure B;
begin
ShowMessage("B");
end;
begin
try
{ TODO -oUser -cConsole Main : Insert code here }
except
on E: Exception do
Writeln(E.ClassName, ": ", E.Message);
end;
end.
← →
MBo © (2011-01-11 16:37) [1]можно использовать ключевое слово forward
← →
Закончивший давно (2011-01-11 16:37) [2]Можно.
Если B в другом модуле и если он в юзес
← →
Amoeba_ (2011-01-11 16:41) [3]
> как можно в процедуре A вызвать процедуру B, которая объявлена
> позже.
Так, просто объявив ее без реализации, но с директивой forward:program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure B; forward;
procedure A;
begin
B;
end;
procedure B;
begin
ShowMessage("B");
end;
begin
try
{ TODO -oUser -cConsole Main : Insert code here }
except
on E: Exception do
Writeln(E.ClassName, ": ", E.Message);
end;
end.
← →
начинающий1993 (2011-01-11 16:43) [4]а как будет правильнее, у меня консольное приложение и несколько взаимосвязанных процедур
← →
sniknik © (2011-01-11 16:47) [5]правильнее их взаиморазвязать
← →
начинающий1993 (2011-01-11 16:50) [6]
> у меня консольное приложение и несколько взаимосвязанных
> процедур
приложение по сути разбирает xml-файл (для этого используются написанные процедуры) и выводит WriteLn сообщения. Может объединить все процедуры в один класс?
← →
Ega23 © (2011-01-11 16:58) [7]
> Может объединить все процедуры в один класс?
Может и объединить. А может и нет.
Всё зависит от задачи.
← →
начинающий1993 (2011-01-11 17:19) [8]Задача: Открыть xml-файл, пройти по всем узлам, включая вложенные, проверить значение атрибута "error_handling", если значение равно "critical" заменить его на "not_critical" (В будущем таких проверок может быть больше, на каждую проверку отдельная процедура). Если файл был изменен, сохранить изменения.
Основные процедуры:
WorkXMLLoad(const AFileName: string); // загружает XML-файл в объект TXMLDocument
WorkXMLAnalyseErrorHandling; // анализирует содержимое XML-файла
WorkXMLSave; // сохраняет изменения
Сначала думал объединить все в класс.
TTestWorkXML = class(TObject)
private
FWorkXML: TXMLDocument;
public
constructor Create;
procedure WorkXMLLoad(const AFileName: string);
procedure WorkXMLAnalyseErrorHandling(out AMsg: string);
procedure WorkXMLSave;
end;
использование класса:
TestWorkXML := TTestWorkXML.Create;
try
TestWorkXML.WorkXMLLoad("Work.xml");
TestWorkXMLAnalyseErrorHandling(Msg);
WriteLn(Msg);
TestWorkXMLSave("Work.xml");
finally
TestWorkXML.Free;
end;
← →
Ega23 © (2011-01-11 17:24) [9]
TTestWorkXML = class(TObject)
private
FWorkXML: TXMLDocument;
procedure WorkXMLLoad(const AFileName: string);
public
constructor Create(const AFileName: string);
function WorkXMLAnalyseErrorHandling: string;
procedure WorkXMLSave;
end;
использование класса:
with TTestWorkXML.Create("Work.xml") do
try
WriteLn(AnalyseErrorHandling);
Save("Work.xml");
finally
Free;
end;
← →
Плохиш © (2011-01-11 17:26) [10]
> procedure WorkXMLLoad(const AFileName: string);
>
совместить с конструктором
> TestWorkXMLAnalyseErrorHandling(Msg);
>
добавить два параметра старое и новое значение и выкинуть ерунду написанную в описании в скобках
← →
Медвежонок ХМЛ © (2011-01-11 17:30) [11]Гибчее вместо всей этой дури написать одну функцию перебора узлов по переданному ей выражению xpath
и несколько специфичных callback функций для конкретных проверок-модификаций.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.04.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c