大概讲讲该段程序
procedure TForm1.Button1Click(Sender: TObject);
const arr:array [0..1] of string=('s55','111');var
i,j:Integer;
ss,sl:TStringList;
begin
ss:=TStringList.Create;
sl:=TStringList.Create;
ss.LoadFromFile('d:\111.txt);
for i:=0 to ss.Count-1 do
begin
if sl.IndexOf(ss.Strings[i])=-1 then
begin
if ((pos(arr[0],ss.Strings[i])>0) or (pos(arr[1],ss.Strings[i])>0)) then
j:=3
else
j:=2;
while j>0 do
begin
sl.Add(ss.Strings[i]);
dec(j);
end;
end;
大概帮我讲讲 红的部分着重讲讲
[解决办法]
这段代码,好像我写的呢,好人做到底,我来详细解释吧:
const arr:array [0..1] of string=('s55','111');
定义一个静态的string字符数组arr,只有2阶并赋值;即arr[0]='s55';arr[1]='111';
当然,如果只是这2项值,此定义可以去掉,把后面的arr[0],arr[1]直接换成s55和111即可
我这样定义是为了数目很多时好扩展维护,直接增加阶数,添加初始值即可;后面就改成循环来判断,如
j:=2;
for k:=low(arr) to high(arr) do
begin
if pos(arr[k],ss.Strings[i])>0 then
begin
j:=3;
brrak;
end;
end
for i:=0 to ss.Count-1 do
循环ss中所有数据项,每行的值是:ss.Strings[i]
if sl.IndexOf(ss.Strings[i])=-1 then
判断sl中有没有ss.Strings[i],没有就返回-1,有的话返回大于等于0值
if ((pos(arr[0],ss.Strings[i])>0) or (pos(arr[1],ss.Strings[i])>0)) then
判断ss.Strings[i]有没有arr[0]或者arr[0]字符;即有没有s55或111;有的话就设置j=3,没有就设置j=2
while j>0 do
begin
sl.Add(ss.Strings[i]);
dec(j);
end;
根据j的值,循环3次或者2次,实现在s1中添加ss.Strings[i] 3次或者2次;
dec(j);dec是让变量j减1;以便退出循环