以上字符串等于"3test line3“
当我在编辑框中输入上面的行,并说;StrVar := Edit1.text;StrVar is "chr(33)+'test line'+chr(33)“
如何获得结果3test line3作为变体;
为了实现这一点,我使用来自rem-objects的pascal脚本引擎。可能是一种更简单的方法..
欢迎任何想法..。
发布于 2010-10-15 05:15:16
如果您需要一个将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;发布于 2010-10-15 04:36:46
脚本引擎可能是你能得到的最好的。一些语言有一种内置的方法来计算用它们自己的代码编写的表达式,但只有在运行时中内置了解释器(有时是编译器)的脚本语言。作为一种纯编译语言,Delphi不提供这些功能,因此您需要提供自己的脚本语言,如PascalScript。
https://stackoverflow.com/questions/3936928
复制相似问题