2011-06-07 49 views
1

因此,我有几个摘要文件,我想阅读并从中获取值。索引处的值TStringList问题

我做了以下内容:

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”(例如),并且我也可以在插入命令后突出显示OutputSummary [ndx]并查看该值是否正确插入。

然后我打开第二文件,它也能正常工作,直到线

valuestring := OutputSummary[ndx] + delimiter + temp; 

首次OutputSummary [0]是正确的,被添加了正确的线。

但是,OutputSummary [1]到OutputSummary [82]与OutputSummary [0]!相同!这是没有意义的,因为当我第一次添加这些值时,我可以看到OutputSummary [1]到82是唯一且正确的。

任何人都可以看到问题吗?这是一个调试错误?我是否错过了一些我看不到的东西?

感谢

回答

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。这样可以更轻松地阅读代码并理解它应该做什么。

+0

谢谢,工作!我想我最初是这样做的,但是在我初始化这些值之前,它给了我一些问题,而且我从未改变过它。 – KingKong 2011-06-07 20:49:37

+0

@金刚:很高兴能帮到你。 – 2011-06-07 20:52:06