返回指定字符在字串中第N次出现的位置值?(50分)

  • 主题发起人 主题发起人 Robin_Fang
  • 开始时间 开始时间
R

Robin_Fang

Unregistered / Unconfirmed
GUEST, unregistred user!
如:20011218031849,12196,25,10;如指定要返回“,”第2次出现的位置:21
不是对某个变量或常量处理,
问题是有个表的字段值形如:
20011218031849,12196,25,10
分隔符出现的位置不定,而数据分析时可能需要第2、3个分隔之间的值与条件进行匹配;
 
function aaa(str,substr:string;times:integer):integer;
var
tmpint,i:integer;
tmpstr1:string;
begin
tmpint:=0;
i:=Pos(substr,str);
while i<>0 do
begin
tmpstr1:=copy(str,i+1,1000);
i:=Pos(substr,tmpstr1);

if times=tmpint then
break;
inc(tmpint);

end;
result:=tmpint;

end;
 
To:Jqw
正如提问要求,我是需要从某字段中取任意两个分隔符(分隔符位置不确定)之间的内容,
和用户指定的条件进行匹配查询;
 
分隔符确定吗?
 
目前所要处理的内容分隔符确定,正如示例中的:',';
但我觉得分隔应当不限死,可以通过子字符串的形式给参数;
形如你给的函数对变量或常量的处理,我也写了个类似的函数(能正确返回结果值);
正准备对你的函数做下测试。
 
根据你的要求改动一下肯定会满足要求
 
function ReturnPos(str : string;ch : char;iPos : integer):integer;
var
i,iTmp : integer;
begin
if iPos <= 0 then
begin
result := 0;
exit;
end;

iTmp := 0;

for i := 1 to length(str) do
begin
if str = ch then
begin
iTmp := iTmp + 1;
if iTmp = iPos then
break;
end;
end;
if i = length(str) then
result := 0
else
result := i;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(inttostr(ReturnPos('20011218031849,12196,25,10',',',strtoint(edit1.text))));
end;
 
TO:JQW 经测试,你的函数不能正确地返回结果值,其实如果仅处理确定某字符第N次在指定字串中出现的位置,
这个问题我已解决;
TO:影子 我先测试下你这函数。
TKS
 
function findsubPos(str:string;ch:string;index:integer):integer;
var
Len,I,pn:Integer;
begin
Len := 0;
For I:=1 to Index do
begin
pn:=pos(ch,str);
Len := Len+pn;
str := copy(str,pn+1,Length(str)-pn);
end;
result := Len;
end;
 
To:各位
请看清原意——在SQL语句中如何动态地取符合条件的记录;
你们所做的都是在Delphi中用函数求符合要求的值(其实这个我已处理);
或许JQW的函数是为了返回新的子字串;
总之多谢各位的参与,继续求最佳解决方法。
 
这问题目前已解决,可能由于我的标题没有明确要做的事情,因此导致hupeh和影子给出了
在Dephi中求字符出现位置的结果,而jqw的本意可能是取子串;
为结帖所以分别给分如上。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
930
SUNSTONE的Delphi笔记
S
后退
顶部