当我尝试按索引将特定字符串从一个TStringList
复制到另一个时,我收到了“债券限制超出债券”错误。
我有一个文本文件,其中包含使用竖线“|”格式化的行分隔符。它看起来像这样:
在我的目标文件中,我只想从以'3M'
开头的行中复制一些项目,以便得到类似的内容(例如第一行):
3M 2189300002 12.99
3M
是Stringlist.strings[1]
2189300002
是Stringlist.strings[3]
12.99
是Stringlist.strings[6]
这是我的代码:
var
sl,new : tstringlist;
lscount,index : integer;
begin
sl:= TStringList.Create;
sl.LoadFromFile('C:\Folder\test.txt');
new := tstringlist.create;
lscount := lstringlist.Count;
for index := 0 to lscount do
begin
sl.delimiter := '|';
sl.StrictDelimiter := True;
sl.DelimitedText := sl.Strings[index];
if sl.Strings[1] = '3M' then
new.Add(sl.Strings[1]+sl.Strings[3]+sl.Strings[6]);
end;
new.SaveToFile('C:\Folder\new.txt');
sl.Free;
new.Free
end;
我的代码出了什么问题?
答案 0 :(得分:2)
您的代码中存在很多错误。
您的for
循环从索引0循环到lscount
,但TStringList
的上限改为lscount-1
。
在循环浏览sl
时,您正在修改sl
。在解析每一行时,您需要使用单独的TStringList
。
您正在使用基于1的索引访问已解析的字符串,但TStringList
使用的是基于0的索引。
尝试更像这样的事情:
var
sl, parse, new : TStringList;
index : Integer;
begin
sl := TStringList.Create;
try
sl.LoadFromFile('C:\Folder\test.txt');
new := TStringList.create;
try
parse := TStringList.Create;
try
parse.Delimiter := '|';
parse.StrictDelimiter := True;
for index := 0 to sl.Count-1 do
begin
parse.DelimitedText := sl.Strings[index];
if (parse.Count > 5) and (parse.Strings[0] = '3M') then
new.Add(parse.Strings[0] + ' ' + parse.Strings[2] + ' ' + parse.Strings[5]);
end;
finally
parse.Free;
end;
new.SaveToFile('C:\Folder\new.txt');
finally
new.Free;
end;
finally
sl.Free
end;
end;