-4

これに対する答えが何であるかはよくわからないので、ここにあるものをよりよく理解するのに役立つ情報をいただければ幸いです. 私の目標は、テキスト ファイルの内容をリストに読み取り、情報を解析し、孤立したレコード (子レコード/行が関連付けられていない親レコード/ファイル内の行) を削除し、残りの行を書き戻すことです。ファイルを順番に。

私は次のアプローチを使用します

IList<String> lines  = File.ReadAll(Filepath);
IList<String> secondlines = lines.Copy();

foreach (String line in lines) 
{
    If Brecord 
        foreach String record in secondlines 
        {
             if  record is same as Brecord 
                   //No Parent record found for this Brecord before it
                    Delete record 
              else if record is Parent of Brecord 
                     exit loop
         }
}


File.WriteAll(secondlines , SecondPath)

これが発生するたびに、ファイルの内容がファイルに表示される順序で処理されるようにするにはどうすればよいですか?

4

3 に答える 3

2

方法はありませんFile.ReadAll

メソッドFile.ReadAllLinesFile.ReadLinesはすでにファイルの行を正しい順序で返します。したがって、それを保証するために何もする必要はありません。

(それらの違いはFile.ReadAllLines、ファイル全体を一度にメモリに読み取り、ファイルの内容全体を含む配列を提供するのに対し、File.ReadLines怠惰で、返されたオブジェクトを通過したときにのみファイルから読み取ることですforeach。最後の場合は、すべてのファイルを読み取る必要があります。「1行ずつ」読み取るため、ファイル全体を一度にメモリに保存する必要はありません。)

于 2013-01-26T15:17:22.340 に答える
0

ステートメントが実行している場合は100%確実ではありませんが、Linqを使用しないのはなぜですか

var lines = File.ReadAll(filepath)
                .Where(x=>( x.Something == "something else"));

File.WriteAll (lines, SecondPath)

またはあなたの場合、より可能性が高い

var lines = File.ReadAll(filePath).Distinct();

これにより、行がリストに読み込まれる順序が維持されます。また、foreachループ中にオブジェクトのコンテンツを変更する場合は注意が必要です。

于 2013-01-26T15:01:10.070 に答える
0

それらをどこかで明示的にソートまたは並べ替えている場合を除いて、ファイルに表示されている順序で何かが発生していることをすでに確認しているはずです。

  • 実装するフレームワークオブジェクトIListは本質的に順序付けられています
  • File.ReadAllLinesテキストファイル内の行のリストを表示順に返します。
  • IListusingを列挙すると、foreach各要素に順番にアクセスします。
  • File.WriteAllLines文字列を順番に新しいファイルに書き込みます。

貼り付けたコードは実際に使用しているコードではないため、入力リスト内の要素の順序を乱すような、より微妙なことを行っているかどうかを確認することはできません。特に、私はあなたがどのようにやっているのか非常に興味深いです

delete record

一部、列挙中に変更することはできませんのでIList。私の疑いは、2番目の重複のないリストを作成するために何をしていても、実際に問題が発生しているところです。

于 2013-01-26T15:01:19.007 に答える