上面的字符串等于“3test line3”
当我在上面的行中输入一个编辑框,然后说; StrVar:= Edit1.text; StrVar是“chr(33)+'测试线'+ chr(33)”
如何将结果3test line3作为变体;
为了实现这一点,我使用了rem-objects的pascal脚本引擎。 可能是一种更简单的方法..
欢迎任何想法......
答案 0 :(得分:2)
如果你需要一个以Delphi字符串文字作为输入的函数,并返回字符串,例如
'This is a test! '#9728#9729
将被评估为
This is a test! ☀☁
然后这样做:
function ParseStr(const Str: string): string;
var
InLiteral, InOrdinal: boolean;
ActualHigh: integer;
i: Integer;
ordinal: string;
const
STRING_TERMINATOR = '''';
CHAR_SYMBOL = '#';
NUMBERS = ['0' .. '9'];
WHITESPACE = [#$20, #$A0, #$09];
begin
SetLength(result, length(Str));
ActualHigh := 1;
InLiteral := false;
InOrdinal := false;
i := 1;
if length(Str) = 0 then Exit;
repeat
if InLiteral then
begin
if (Str[i] = STRING_TERMINATOR) and
(i < length(Str)) and (Str[i + 1] = STRING_TERMINATOR) then
begin
result[ActualHigh] := STRING_TERMINATOR;
inc(ActualHigh);
inc(i, 2);
Continue;
end
else if (Str[i] = STRING_TERMINATOR) then
begin
InLiteral := false;
inc(i);
Continue;
end;
result[ActualHigh] := Str[i];
inc(ActualHigh);
inc(i);
end
else if InOrdinal then
begin
if Str[i] in NUMBERS then
begin
ordinal := ordinal + Str[i];
if i = length(Str) then
begin
result[ActualHigh] := char(StrToInt(ordinal));
inc(ActualHigh);
end;
inc(i);
end
else if Str[i] = STRING_TERMINATOR then
begin
result[ActualHigh] := char(StrToInt(ordinal));
inc(ActualHigh);
InLiteral := true;
InOrdinal := false;
inc(i);
end
else if Str[i] = CHAR_SYMBOL then
begin
result[ActualHigh] := char(StrToInt(ordinal));
inc(ActualHigh);
ordinal := '';
inc(i);
end
else if Str[i] in WHITESPACE then
inc(i)
else
raise EConvertError.CreateFmt('Invalid string constant: "%s"', [Str]);
end
else
begin
if Str[i] = STRING_TERMINATOR then
begin
InLiteral := true;
inc(i);
end
else if Str[i] = CHAR_SYMBOL then
begin
InOrdinal := true;
inc(i);
ordinal := '';
end
else if Str[i] in WHITESPACE then
inc(i)
else
raise EConvertError.CreateFmt('Invalid string constant: "%s"', [Str]);
end;
until i > length(Str);
SetLength(result, ActualHigh - 1);
end;
答案 1 :(得分:0)
脚本引擎可能是您获得的最佳选择。有些语言有内置的方法来计算用自己的代码编写的表达式,但只有脚本语言在运行时内置了解释器(有时是编译器)。作为一种纯编译语言,Delphi不提供这种语言,因此您需要提供自己的脚本语言,例如PascalScript。