所以我有几个我想要阅读的摘要文件并从中获取值。
我正在做以下事情:
OutputSummary := TStringList.Create;
for idx := 0 to 82 do
OutputSummary.Insert(idx, '');
初始化我正在使用的值
然后,我有一个循环:
for idx := 0 to SummaryFiles.Count - 1 do
begin
AssignFile(finp, SummaryFiles[idx]);
ReSet(finp);
for ndx := 0 to 5 do
ReadLn(finp, buff);
for ndx := 0 to 82 do
begin
ReadLn(finp, buff);
temp := GetToken(buff, ' ');
buff := GetRemains(buff, '|');
temp := GetToken(buff, '|');
valuestring := OutputSummary[ndx] + delimiter + temp;
OutputSummary.Insert(ndx, valuestring);
end;
CloseFile(finp);
end;
第一个0到5循环跳过我不想读的行,0到82读取看起来像
的行1. Initial Wait List|1770
所以我正在调试程序,看它是如何工作的,只有2个SummaryFiles。
第一次,它完美地运作。该行被正确读取,我得到了值,当我插入valuestring时,它看起来像“,1770”(例如),我还可以在insert命令后突出显示OutputSummary [ndx]并看到值是否正确插入。
然后我打开第二个文件,它也可以正常工作直到
行valuestring := OutputSummary[ndx] + delimiter + temp;
第一次,OutputSummary [0]是正确的,并添加了正确的行。
然而,OutputSummary [1]到OutputSummary [82]与OutputSummary [0]相同!这没有任何意义,因为当我第一次添加这些值时,我可以看到OutputSummary [1]到82是唯一且正确的。
有人能看到问题吗?它是调试器错误吗?我只是遗漏了一些我看不到的明显的东西吗?
感谢
答案 0 :(得分:3)
在我看来,您正在尝试创建某种类型的表,每个输入文件一列,文件中每行一行,列以delimiter
分隔。如果是这样,在字符串列表上调用.Insert
将无法正常工作,因为您最终会插入83 * SummaryFiles.Count
行。
而不是Insert
调用,你需要这样的东西:
if OutputSummary.count > ndx then
OutputSummary[ndx] := valuestring
else OutputSummary.Add(valuestring);
看看是否有帮助。
此外,您可能需要考虑将“幻数”82替换为有意义的常量,例如const LINES_TO_READ = 82
。这使得更容易阅读代码并理解它应该做什么。