开发者

TStringList problem with values at index

So I have several summary 开发者_如何学Gofiles that I want to read and get the values from.

I am doing the following:

OutputSummary := TStringList.Create;
for idx := 0 to 82 do
  OutputSummary.Insert(idx, '');

to initialize the values I'm using

then, I have a loop:

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;  

The first 0 to 5 loop skips the lines I don't want to read, and the 0 to 82 reads lines that look like

1. Initial Wait List|1770

So I was debugging the program to see how it works with just 2 SummaryFiles.

The first time through, it works perfectly. The line is read correctly, I get the value and when I insert valuestring, it looks like ",1770" (for example), and I can also highlight OutputSummary[ndx] after the insert command and see that the value was inserted correctly.

Then I open the second file, which also works fine until the line

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

the first time, OutputSummary[0] is correct and the correct line is added.

However, OutputSummary[1] through OutputSummary[82] is the same as OutputSummary[0]! This makes no sense since when I was first adding those values, I could see that OutputSummary[1] through 82 were unique and correct.

Can anyone see a problem? Is it a debugger error? Am I just missing something obvious that I don't see?

thanks


It looks to me like you're trying to create a table of some sort, with one column per input file and one row per line in the file, with the columns separated by the delimiter. If so, calling .Insert on the string list isn't going to quite work right, since you'll end up inserting 83 * SummaryFiles.Count rows.

Instead of the Insert call, you need something like this:

if OutputSummary.count > ndx then
  OutputSummary[ndx] := valuestring
else OutputSummary.Add(valuestring);

See if that helps.

Also, you might want to consider replacing the "magic number" 82 with a meaningful constant, like const LINES_TO_READ = 82. That makes it easier to read the code and understand what it's supposed to be doing.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜