AnsiPos或Pos与Delphi中的结果不匹配

时间:2018-06-08 06:31:52

标签: delphi substring

我无法找出发生这种情况的原因。在Windows上我有一个txt文件,我从第一行读取文本'[směr:A->B]'

我的调试器代码。我使用断点,所以我看到AnsiPos(line, '[sm')的结果为0.为什么?我想得到1.但是我试图搜索AnsiPos(line, 'sm')AnsiPos(line, 'm')但仍未找到正面结果。为什么?我也试过了Pos()。我应该使用不同的功能吗?我错过了什么?

readln(f,line);
if line[1]='[' then
begin;
  if line[2]='s' then
     if AnsiPos(line, '[sm') > 0 then
        begin
          if AnsiPos(line, 'B->A') > 0 then
            smerTestu := 'B'
          else
            smerTestu := 'A';
        end;
end;

1 个答案:

答案 0 :(得分:1)

来自System.Pos,声明功能:

function Pos(const SubStr, Str: _ShortStr; Offset: Integer): Integer;
function Pos(const SubStr, Str: UnicodeString; Offset: Integer): Integer; overload;
function Pos(const SubStr, Str: _WideStr; Offset: Integer): Integer; overload;
function Pos(const SubStr, Str: _RawByteStr; Offset: Integer): Integer;

定义为:

  

找到给定字符串中的子字符串。

     

Pos方法返回Str的第一个出现的索引,开始在偏移处搜索。

     

如果未找到Substr或Offset无效,则此方法返回零(例如,如果Offset超过String长度或小于1)。

     

Offset参数是可选的。默认情况下,偏移设置为1,如果未指定偏移值,则从默认值开始搜索。

在您的代码中,您混淆了参数StrSubStr的顺序。

AnsiPos()函数的工作方式相同。