【问题标题】:TStringList problem with values at index索引处的值的 TStringList 问题
【发布时间】:2025-12-28 13:20:19
【问题描述】:

所以我有几个摘要文件要读取并从中获取值。

我正在做以下事情:

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 是唯一且正确的。

任何人都可以看到问题吗?是调试器错误吗?我只是错过了一些我看不到的明显东西吗?

谢谢

【问题讨论】:

    标签: delphi loops tstringlist


    【解决方案1】:

    在我看来,您正在尝试创建某种表,每个输入文件一列,文件中每行一行,各列由delimiter 分隔。如果是这样,在字符串列表上调用 .Insert 将无法正常工作,因为您最终会插入 83 * SummaryFiles.Count 行。

    您需要这样的东西,而不是 Insert 调用:

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

    看看有没有帮助。

    此外,您可能需要考虑将“幻数”82 替换为有意义的常量,例如const LINES_TO_READ = 82。这样可以更轻松地阅读代码并理解它应该做什么。

    【讨论】:

    • 谢谢,成功了!我想我最初是这样的,但是在我初始化值之前它给了我一些问题,我从来没有改回来。
    • @KingKong:很高兴我能帮上忙。
    最近更新 更多