2017-05-03 2 views
1

は基本的に私は何をする必要があることはそうです:2つのテキストファイルを比較し、ファイルの1番に存在しない行をエクスポート

File no.1: 
1 
2  
4  
5  
51  
21 

File no.2: 
31 
21 
4 

What should be exported: 
1 
2 
5 
51 

基本的には唯一の第二には存在しない行をエクスポートテキスト。

私の現在の試み:

bool exists = false; 
string[] lines1 = File.ReadAllLines("path1"); 
string[] lines2 = File.ReadAllLines("path2"); 

for (int i = 0; i < lines1.Length; i++) 
{ 
    for (int g = 0; g < lines2.Length; g++) 
    { 
     if (lines1[i] == lines2[g]) 
     { 
      exists = true; 
      Console.WriteLine("Exists!"); 
      break; 
     }     
    } 
    if (!exists) 
    { 
     Console.WriteLine(lines1[i]); 
     exists = false; 
    } 
} 
Console.WriteLine("End of file reached"); 
Console.ReadLine(); 

私が使用する適切な機能があるように、これは、私が思い付いたあなたの助けに感謝ですが、私は、感じます!

+1

はあなたにも5内を望んでいないあなたは確かにあります結果? –

+0

@FrancescoB。ハハ!あなたは正しい私の悪いだった:) – TricksterJoe

答えて

4

希望の結果に基づいて、LINQとExcept拡張メソッドを使用できます。このように:file2あなたが保存したいを複製含めることができる場合は一般的なケースでは

string[] result = lines1.Except(lines2).ToArray(); 
+0

うわー!まあ、それはちょうど私の試みをかなり哀れなものにしました。 – TricksterJoe

+0

この解決策は、 'File.ReadAllLines'の代わりに' File.ReadLines'でソースファイルの文字列配列を読み込むことで改善することができます。 – Abion47

1

、私はHashSet<string>を使用することをお勧め:

HashSet<string> toSkip = new HashSet<string>(File.ReadLines(path1)); 

var toExport = File 
    .ReadLines(path2) 
    .Where(line => !toSkip.Contains(line)); 
//.ToArray(); // <- if you want to materialize the final result 

// Test 
foreach (var item in toExport) 
    Console.WriteLine(item); 
関連する問題