![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Макросы
olookin © (2002-12-13 13:02:00)Первичная процедура обработки сроки
procedure TMacroModule.MacroCommand(var CommandString: Ansistring);
var pars: TStringArray;
equ,a,s: Ansistring;
n,p,x: integer;
id: TIntegerArray;
begin
RVar:=0; equ:=CommandString; n:=DetectEqualization(equ,id);
if n<>-1 then Delete(CommandString,1,Pos("=",CommandString));
CommandString:=Trim(CommandString);
SquareBracketCalc(CommandString,CommandString);
BracesCalc(CommandString,CommandString);
RoundBracketCalc(CommandString,CommandString);
a:=Trim(CommandString);
if (Pos("(",a)<>0) and (Pos(")",a)<>0) then begin
Delete(a,1,Pos("(",a)); Delete(a,Pos(")",a),Length(a)); x:=0;
while a<>"" do begin p:=Pos(",",a);
if p<>0 then begin s:=Trim(Copy(a,1,p-1)); Delete(a,1,p); end else begin
s:=Trim(a); a:=""; end;
if s<>"" then begin SetLength(pars,x+1); pars[x]:=s; Inc(x); end; end; end;
a:=LowerCase(CommandString);
if n<>-1 then begin Ind:=n;
if Length(pars)=0 then PerformEqualization(Ind,a,id); end;
AllFunctions(a,pars); pars:=nil; id:=nil;
end;
Oldman (2002-12-13 13:21:00) [1]Попробуй обработать строку по приоритету вложенности:
Пример: есть a(b[c{}],d[])
Естественно, обработав строку и выяснив приоритеты получаем:
a(b[c{}],d[]) Вычислить d[]=D
a(b[c{}],D) Вычислить c{}=D
a{b[C],D) Вычислить b[C]=B
a(B,D) Dsxbckbnm a(B,D)=A
A
olookin (2002-12-13 13:15:00) [2]To Anatoly Podgoretsky
Справедливо
Итак макрос
D = Window{1}.Fmus[CalcMaxValue(Window{1}.Afterload]
A = CalcMinValue(Window{1}.Lm, 0, 1000)
B = CalcMeanValue(Window{1}.Afterload[3], A[5], D[100])
Message(B[6])
Как решить?
Anatoly Podgoretsky (2002-12-13 13:11:00) [3]Да и тебе говорили при помещении вопроса в форум, описиш что ты хочешь сделать, приведи образцы входных данных, иначе будешь ты "Саид"
Anatoly Podgoretsky (2002-12-13 13:10:00) [4]Используй стек
olookin (2002-12-13 13:09:00) [5]procedure TMacroModule.MacroCommand(var CommandString: Ansistring);
var pars: TStringArray;
equ,a,s: Ansistring;
n,p,x: integer;
id: TIntegerArray;
begin
RVar:=0; equ:=CommandString;
проверка на равенство (например A = CalcMinValue(Q, 0, 100))
n:=DetectEqualization(equ,id);
if n<>-1 then Delete(CommandString,1,Pos("=",CommandString));
CommandString:=Trim(CommandString);
проверка скобок []
SquareBracketCalc(CommandString,CommandString);
проверка скобок {}
BracesCalc(CommandString,CommandString);
проверка скобок ()
RoundBracketCalc(CommandString,CommandString);
a:=Trim(CommandString);
if (Pos("(",a)<>0) and (Pos(")",a)<>0) then begin
Delete(a,1,Pos("(",a)); Delete(a,Pos(")",a),Length(a)); x:=0;
while a<>"" do begin p:=Pos(",",a);
if p<>0 then begin s:=Trim(Copy(a,1,p-1)); Delete(a,1,p); end else begin
s:=Trim(a); a:=""; end;
if s<>"" then begin SetLength(pars,x+1); pars[x]:=s; Inc(x); end; end; end;
a:=LowerCase(CommandString);
if n<>-1 then begin Ind:=n;
if Length(pars)=0 then PerformEqualization(Ind,a,id); end;
AllFunctions(a,pars); pars:=nil; id:=nil;
end;
olookin (2002-12-13 13:06:00) [6]Какой вопрос не ясен?
olookin (2002-12-13 13:06:00) [7]Есть строка CommandString с ней работаю
Игорь Шевченко (2002-12-13 13:05:00) [8]Как прикажешь тебя понимать, Саид ? (с) Белое солнце пустыни