2013-06-12 42 views
1

我有一個包含逗號分隔值的文本文件。它看起來像這樣:查找文本文件中的所有相似行

3,23500,R,5998,20.38,06/12/2013 01:44:17 
2,23500,P,5983,20.234,06/12/2013 01:44:17 
3,23501,R,5998,20.38,06/12/2013 01:44:18 
2,23501,P,5983,20.235,06/12/2013 01:44:18 
3,23502,R,6000,20.4,06/12/2013 01:44:19 
2,23502,P,5983,20.236,06/12/2013 01:44:19 
3,23503,R,5999,20.39,06/12/2013 01:44:20 
2,23503,P,5983,20.236,06/12/2013 01:44:20 

我的任務是提取在唯一文件中以相同數字開頭的行。例如,在你看到一些線路開始2和一些與3上述情況......可以有更多的情況下,像4等..

什麼是做到這一點的最好辦法fastes?我正在使用的文件是相當大的,有時是在千兆字節的數量級...

我沒有拆分每一行,並存儲第一個值,這將是我在數組中查找的數字,然後刪除重複來自陣列的值...它的工作,但它非常緩慢!

這是我自己的代碼:

private void buttonBeginProcess_Click(object sender, EventArgs e) 
{ 
    var file = File.ReadAllLines(_fileName); 
    var nodeId = new List<int>(); 

    foreach (var line in file) 
    { 
     nodeId.Add(int.Parse(line.Split(',')[0])); 
    } 

    //Unique numbers 
    nodeId = nodeId.Distinct().ToList(); 
} 
+1

你試過了什麼代碼?你的預期產出是多少? –

+0

@SamLeach我在問題結尾解釋了我迄今爲止所嘗試的內容。 –

+0

發佈代碼,以便我們可以瞭解您的需求。 –

回答

3
var lines = File.ReadLines(myFilePath); 
var lineGroups = lines 
        .Where(line => line.Contains(",")) 
        .Select(line => new{key = line.Split(',')[0], line}) 
        .GroupBy(x => x.key); 
foreach(var lineGroup in lineGroups) 
{ 
    var key = lineGroup.Key; 
    var keySpecificLines = lineGroup.Select(x => x.line); 
    //save keySpecificLines to file 
} 
+0

你可以只是行[0]而不是分裂它 – Sayse

+0

這假設初始字段只有1char寬。 – spender

+0

它是:)......... – Sayse

1

你可以嘗試使用StreamReader/StreamWriter處理每次打開一個文件的一行:

var writers = new Dictionary<string, StreamWriter>(); 

using (StreamReader sr = new StreamReader(pathToFile)) 
{ 
    while (sr.Peek() >= 0) 
    { 
     var line = sr.ReadLine(); 
     var key = line.Split(new[]{ ',' },2)[0]; 
     if (!lineGroups.ContainsKey(key)) 
     { 
      writers[key] = new StreamWriter(GetPathToOutput(key)); 
     } 

     writers[key].WriteLine(line); 
    } 
} 

foreach(StreamWriter sw in writers.Values) 
{ 
    sw.Dispose(); 
} 

使用這種方法,可以確保你的代碼永遠不需要使用整個輸入文件,所以輸入文件的大小無關緊要。當然,它的缺點是必須在整個過程中保持任意數量的文件。

相關問題