Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1293022442
12
2010-12-22 15:54
2011.04.10
Черная дыра. Как она может быть такой, как пишут?


15-1293132611
DVM
2010-12-23 22:30
2011.04.10
Консольное приложение и UAC


2-1294996934
12
2011-01-14 12:22
2011.04.10
Error creating variant or safe array. Из-за чего?


15-1293214377
tesseract
2010-12-24 21:12
2011.04.10
Дворянские имена в Германии хотят запретить.


2-1294537784
P
2011-01-09 04:49
2011.04.10
Темы Windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский