代码之家  ›  专栏  ›  技术社区  ›  Rodrigo Peetz

Delphi Pos始终返回0

  •  1
  • Rodrigo Peetz  · 技术社区  · 7 年前

    我真的不知道为什么Pos总是返回0而不是char“;”字符串中的位置 因此,一个示例输出是 2;fulano;fulano;0 3;ciclano;ciclano;0 4;beltrano;beltrano;0 5;foo;foo;0 8;jose;jose;0 9;maria;maria;0

    代码是

    var
      linha,uid,login,senha,email,tipo : WideString;
      resposta : TStringList;
      I : Integer;
    begin
      try
        resposta := TStringList.Create;
        resposta.Text := frmMain.IdHTTP1.Get(frmMain.cdsConfig.FieldByName('WebService').AsString+'listdest.php');
        for I := 0 to resposta.Count-1 do
        begin
          linha := resposta.Strings[i];
          if i = 0 then
            Delete(linha,1,1); // the first line have one wierd $FEFF
          if length(linha) > 5 then
            begin
    
              uid := Copy(linha,1,Pos(linha,';')-1);
              Delete(linha,1,Pos(linha,';'));
              login:=Copy(linha,1,Pos(linha,';')-1);
              Delete(linha,1,Pos(linha,';'));
              senha:=Copy(linha,1,Pos(linha,';')-1);
              Delete(linha,1,Pos(linha,';'));
              email:=Copy(linha,1,Pos(linha,';')-1);
              Delete(linha,1,Pos(linha,';'));
              tipo:=Copy(linha,1,Pos(linha,';')-1);
              Delete(linha,1,Pos(linha,';'));
            end;
        end;
        //dlgWait.Close;
      except on E :Exception do
        begin
          MessageBox(Self.Handle,PWideChar(E.Message),'Erro',MB_OK+MB_ICONERROR+MB_APPLMODAL);
          dlgWait.Close;
          FreeAndNil(resposta);
        end;
      end;
    
    1 回复  |  直到 7 年前
        1
  •  7
  •   Jerry Dodge    7 年前

    您的呼叫 Pos 是向后的。参数包括:

    function Pos(const SubStr, Str: _ShortStr; Offset: Integer): Integer;
    

    但您的代码假设它们是:

    function Pos(const Str, SubStr: _ShortStr; Offset: Integer): Integer;
    

    linha 在内部 ';' ,当然,除非 = ,它将返回 0 .


    另一方面,这只是一个性能提示。而不是打电话 销售时点情报系统

    P := Pos(';', linha);
    uid := Copy(linha,1,P-1);
    Delete(linha,1,P);