1

そのため、値を読み取って取得したい要約ファイルがいくつかあります。

私は次のことをしています:

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 だけでどのように動作するかを確認しました。

初めて、それは完全に機能します。行が正しく読み取られ、値が取得され、値文字列を挿入すると、",1770" のように表示されます (たとえば)。また、挿入コマンドの後に OutputSummary[ndx] を強調表示して、値が正しく挿入されたことを確認することもできます。

次に、2 番目のファイルを開きます。これも次の行まで正常に動作します。

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

初めて、OutputSummary[0] は正しく、正しい行が追加されます。

ただし、OutputSummary[1] ~ OutputSummary[82] は OutputSummary[0] と同じです。これらの値を最初に追加したときに、OutputSummary[1] から 82 までが一意で正しいことがわかったので、これは意味がありません。

誰でも問題を確認できますか? デバッガのエラーですか?見えない明らかなものが欠けているだけですか?

ありがとう

4

1 に答える 1

3

入力ファイルごとに1列、ファイル内の行ごとに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。これにより、コードが読みやすくなり、何をすべきかを理解しやすくなります。

于 2011-06-07T20:43:39.207 に答える