2017-12-06 21 views
0

おはよう、 フォルダ内のテキストを取得するために、多くのテキストファイルをループしています。 ファイルの名前は、date_filename.idのような標準の別のプログラムによって自動的に書き込まれるため、ファイル名に基づいてファイルをフィルタリングすることはできません。CSHARP文字列が含まれている場合、ループスルーファイルをスキップ

最初にORDERRまたはSomething else最初の行は、いくつかのstring.Theループは、現時点では、このように見えますが含まれている場合、ファイルをスキップするためにいくつかの方法がありますので、もし、私が考えていたような行:

DirectoryInfo FilesPath = new DirectoryInfo(path); 
var Files = FilesPath.GetFiles(); 
foreach (var file in Files) 
     { 
      List<string> lines = new List<string>(); 
      using (StreamReader sr = file.OpenText()) 
      { 

       string s = ""; 
       while ((s = sr.ReadLine()) != null) 
       { 
        if (s.Contains("ORDERR")) 
        { 
         "Do something" 
        } 
        else 
        { 
         break; 
        } 
       } 


      } 

しかし、ループが第二ラインに到達、あいまいなことに、それは残りの部分をスキップします。 どうすればいいですか?

は、私は私は本当にあなたの要件を得たかはわからない

+0

を設定し、破るためのフラグです。 – netniV

+0

私はここで問題が何かを得ることはありません... –

+0

Put break;あなたの "Do something"の後の行。それはループから飛び出すでしょう。 –

答えて

2

(私はstackoverflowのを通じて何かを見つけることができません)ヘルプ

の任意の種類のために事前にありがとうございます。しかし、それは(読みやすくするためにLINQを使用して)として簡単ではありません:それはあなたがそれらをスキップしたい場合でも、メモリにすべてのファイルをロードする必要がないため、より効率的である私はEnumerateFilesを使用

var relevantFiles = new DirectoryInfo(path).EnumerateFiles() 
    .Where(f => File.ReadLines(f.FullName).ElementAtOrDefault(0)?.Contains("ORDERR")==false); 

注意。同じことがFile.ReadLinesReadAllLinesではなく)に適用されます。 Enumerable.ElementAtOrDefaultは、ファイルが空の場合はnullを返します。そのため、null条件付き演算子?を使用しています。したがって、クエリは最初の行にORDERRを含むファイルをスキップします。あなたが必要なもの

+0

真剣に、それは最高の答えだった...ありがとう – andrepogg

1

は、ステータスとして次誤差がスペースなしORD ERR可能性がありreadloopのうち、

DirectoryInfo FilesPath = new DirectoryInfo(path); 
var Files = FilesPath.GetFiles(); 
foreach (var file in Files) 
{ 
    bool hasError = false; 
    List<string> lines = new List<string>(); 
    using (StreamReader sr = file.OpenText()) 
    { 
     string s = ""; 
     while ((s = sr.ReadLine()) != null) 
     { 
      if (s.Contains("ORDERR")) 
      { 
       hasError = true; 
       break; 
      } else { 
       lines.Add(s) 
      } 
     } 
    } 

    if (!hasError) 
    { 
     // do something with lines as we were ok with it 
    } 
} 
関連する問題