Форум: "Основная";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
ВнизМакросы Найти похожие ветки
← →
olookin (2002-12-13 13:02) [0]Первичная процедура обработки сроки
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;
← →
Игорь Шевченко (2002-12-13 13:05) [1]Как прикажешь тебя понимать, Саид ? (с) Белое солнце пустыни
← →
olookin (2002-12-13 13:06) [2]Какой вопрос не ясен?
← →
olookin (2002-12-13 13:06) [3]Есть строка CommandString с ней работаю
← →
olookin (2002-12-13 13:09) [4]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;
← →
Anatoly Podgoretsky (2002-12-13 13:10) [5]Используй стек
← →
Anatoly Podgoretsky (2002-12-13 13:11) [6]Да и тебе говорили при помещении вопроса в форум, описиш что ты хочешь сделать, приведи образцы входных данных, иначе будешь ты "Саид"
← →
olookin (2002-12-13 13:15) [7]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])
Как решить?
← →
Oldman (2002-12-13 13:21) [8]Попробуй обработать строку по приоритету вложенности:
Пример: есть 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
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c