2016-10-03 60 views
0

我正在靠牆撞我的頭,我希望有人能指引我朝着正確的方向前進。這不能像我做的那樣複雜。讀取CSV文件,將第3列與第1列分別匹配在一起

我正在研究一個程序讀取一個文件(大約50行左右)的項目,並且我需要讓它將第三列上的數據與單獨行的第一列上的數據進行匹配。我打開了一個新項目,因爲這樣一個簡單的任務太複雜了。

下面是一個例子文件,該文件是密切相關的實際文件我的工作: a1,b1,c1,d1 **c4**,b2,c2,d2 a3,b3,c3,d3 a4,b4,**c4**,d4 a5,b5,c4,d5 我保證這不是一個學校項目,這是我需要弄清楚工作目的的東西。

這是我的,我知道它不會工作,因爲它只是逐行讀取比較。如何讓程序讀取foreach命令中的當前數組值,並對照我在streamreader中捕獲的整個文件?

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

啊人。這很容易,但我從中學到了東西。謝謝您的回答! –

相關問題