2016-10-03 4 views
0

私は壁に頭を打ちました。誰かが正しい方向に向けることを望んでいます。これは私が作っているほど複雑ではありません。CSVファイルを読み込み、別の行の列1と一致するようにします

私は、プログラムが1行(約50行程度)のファイルを読み込み、3行目のデータと別の行の最初の列のデータを一致させる必要があるプロジェクトに取り組んでいます。このような簡単な作業のために複雑すぎるため、私は新しいプロジェクトを開いた。

ここで私が働いている実際のファイルに密接に関連するファイルの例です:私は、これは学校のプロジェクトのためではない約束 a1,b1,c1,d1 **c4**,b2,c2,d2 a3,b3,c3,d3 a4,b4,**c4**,d4 a5,b5,c4,d5 が、これは私が仕事のために把握する必要があるものです。

これは私が持っているものであり、比較のために行ごとにしか読んでいないので、うまくいかないことは分かっています。 streamreaderで捕捉したファイル全体に対して、foreachコマンドの現在の配列値を読み取るプログラムを取得するにはどうすればよいですか?

static void Main(string[] args) 
    { 
     StreamReader sr = new StreamReader("directories.txt"); 
     string sline = sr.ReadLine(); 
     string[] sarray = sline.Split(','); 
     string col3 = sarray[2]; 
     string col1 = sarray[0]; 
     foreach(string a in sarray) 
     { 
      // ?!?!?!!! 
      // I know this won't work because I'm comparing the same line being read. 
      // How in the world can I make this program read col3 of the current line being read against the entire file that was read earlier? 
      if (col3 == col1) 
      { 
       Directory.CreateDirectory("DRIVE:\\Location\\" + a.ToString()); 
      } 

     } 
    } 

ありがとうございました!

+2

使用 'File.ReadAllLines'やコレクション全体との仕事で行くことができる小さいので。 50行に大量のファイルがあるようなものではありません。 – Jonesopolis

+0

解説部分ではデータとは別に何をするべきかを明らかにしていませんが、おそらくlinq(GroupBy)を使って一致を見つけるのに – Plutonix

答えて

2

あなたのファイルには、最も簡単なパス...

var lines = File.ReadLines(filename) 
      .Select(line => line.Split(',')) 
      .ToList(); 

var result = from a in lines 
      from b in lines 
      where a[0] == b[2] 
      select new { a, b }; 

foreach(var x in result) 
{ 
    Console.WriteLine(string.Join(",", x.a) + " - " + string.Join(",", x.b)); 
} 
+1

ああ男です。それは痛いほど簡単でしたが、私はそれを学びました。あなたの答えをありがとう! –

関連する問題