Текущий архив: 2009.05.10;
Скачать: CL | DM;
Вниз
in в VBScript Найти похожие ветки
← →
zzzzzz (2009-03-10 11:39) [0]Как в VBScript написать условие проверки вхождения числа в диапазон, что-то типа
3 in [1..9]
← →
brother © (2009-03-10 11:43) [1]i:=3;
if (i>=1) and (i<=9) then
← →
zzzzzz (2009-03-10 11:46) [2]
> brother © (10.03.09 11:43) [1]
ну а если диапазон задан как: 5, 8, 11, 6, 14
← →
Skyle © (2009-03-10 11:51) [3]A = 7
select case A
case 5, 8, 11, 6, 14 MsgBox "In"
case else MsgBox "out"
end select
← →
Palladin © (2009-03-10 11:53) [4]это не диапазон, это набор значений
if (i=5) or (i=8) or (i=11) or (i=6) or (i=14) then
← →
clickmaker © (2009-03-10 11:54) [5]Or
← →
zzzzzz (2009-03-10 11:56) [6]
> A = 7select case A case 5, 8, 11, 6, 14 MsgBox "In" case
> else MsgBox "out"end select
Thanks. А как через VBScript проверить принадлежит ли число диапазону используя MSScriptControl.ScriptControl
Поправьте где я ошибаюсь:
function Calc(const CalcStr: AnsiString): AnsiString;
var
ScriptCtrl: Variant;
begin
ScriptCtrl := CreateOleObject("MSScriptControl.ScriptControl");
ScriptCtrl.Language := "VBScript";
Result := ScriptCtrl.Eval(CalcStr);
ScriptCtrl := Unassigned;
end;
procedure TForm1.btn_CalcClick(Sender: TObject);
resourcestring
s1 = "select case 2 case 5, 8, 11, 6, 14 MsgBox "In" case else MsgBox "out" end select";
begin
Caption := Calc(s1);
end;
← →
Palladin © (2009-03-10 12:04) [7]интересно, и зачем это делать через MSScriptControl, когда delphi предоставляет для этой операции такой замечательный инструмент как множество?
← →
zzzzzz (2009-03-10 12:10) [8]Пишу анализатор логических выражений. Для этого как раз подходит MSScriptControl.ScriptControl (выражение ниже, например, анализируется на ура). Проблема в том, что выражение может быть вида
2 in [5,6,9]
(Delphi). Из-за незнания как это переделать в VBScript и спрашиваю.
Вот наброски:function Calc(const CalcStr: AnsiString): AnsiString;
var
ScriptCtrl: Variant;
begin
ScriptCtrl := CreateOleObject("MSScriptControl.ScriptControl");
ScriptCtrl.Language := "VBScript";
Result := ScriptCtrl.Eval(CalcStr);
ScriptCtrl := Unassigned;
end;
procedure TForm1.btn_CalcClick(Sender: TObject);
resourcestring
s = "(("abc" = "abc") and ("ABC" = "ABC")) and ((1 < 7) and (5 = 5))";
begin
Caption := Calc(s1);
end;
← →
Skyle © (2009-03-10 12:11) [9]
> zzzzzz (10.03.09 11:56) [6]
Можно, например, так.procedure TForm1.Button1Click(Sender: TObject);
function Calc(const CalcStr: AnsiString): AnsiString;
var
ScriptCtrl: Variant;
begin
ScriptCtrl := CreateOleObject("MSScriptControl.ScriptControl");
ScriptCtrl.Language := "VBScript";
ScriptCtrl.AddCode(CalcStr);
Result := ScriptCtrl.Eval("InRange(7)");
ScriptCtrl := Unassigned;
end;
const
S1 = "function InRange(Value) "#13#10 +
"select case Value "#13#10 +
"case 5, 8, 11, 6, 14 InRange=true "#13#10 +
"case else InRange = False "#13#10 +
"end select "#13#10 +
"end function";
begin
Caption := Calc(S1);
end;
Только действительно, необходимость пока неочевидна.
Страницы: 1 вся ветка
Текущий архив: 2009.05.10;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.008 c