首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串相等,如chr(33)+'test line'+chr(33)

字符串相等,如chr(33)+'test line'+chr(33)
EN

Stack Overflow用户
提问于 2010-10-15 03:44:30
回答 2查看 174关注 0票数 0

以上字符串等于"3test line3“

当我在编辑框中输入上面的行,并说;StrVar := Edit1.text;StrVar is "chr(33)+'test line'+chr(33)“

如何获得结果3test line3作为变体;

为了实现这一点,我使用来自rem-objects的pascal脚本引擎。可能是一种更简单的方法..

欢迎任何想法..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-15 05:15:16

如果您需要一个将Delphi字符串文字作为输入并返回该字符串的函数,例如

代码语言:javascript
复制
'This is a test! '#9728#9729

将被评估为

代码语言:javascript
复制
This is a test! ☀☁

然后,这将完成它:

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2010-10-15 04:36:46

脚本引擎可能是你能得到的最好的。一些语言有一种内置的方法来计算用它们自己的代码编写的表达式,但只有在运行时中内置了解释器(有时是编译器)的脚本语言。作为一种纯编译语言,Delphi不提供这些功能,因此您需要提供自己的脚本语言,如PascalScript。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3936928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档