gpt4 book ai didi

string - Delphi Pos 总是返回 0

转载 作者:行者123 更新时间:2023-12-01 21:58:37 24 4
gpt4 key购买 nike

我真的不知道为什么Pos一直返回0而不是字符“;”字符串中的位置我必须得到输出 Content-Type: text/plain 的 php 页面的响应所以一个输出示例是2;富拉诺;富拉诺;0
3;西克拉诺;西克拉诺;0
4;贝尔特拉诺;贝尔特拉诺;0
5;富;富;0
8;何塞;何塞;0
9;玛丽亚;玛丽亚;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;

最佳答案

您对 Pos 的调用是向后的。参数为:

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

但是您的代码假设它们是:

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

所以实际上它试图做的是在 ';' 中查找 linha 的值,当然除非 linha = ';',它将返回 0

换一种说法,正如 Rudy 所说,你的代码不是大海捞针,而是大海捞针。

交换这些调用的第一个和第二个参数。

<小时/>

顺便说一句,这只是性能方面的提示。不要为每个调用两次 Pos,而是保留该值的缓存副本...

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

关于string - Delphi Pos 总是返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45804442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com