2014-10-17 46 views
1

我試圖用Visual Studio C#編輯文件中的一些數據。我試過使用兩種方法C#中文件的最大數據量?

StreamReader and File.ReadAllLines/ReadAllText 

這兩個結果都給了我3414行內容。我在「ReadAllText」之後使用Split('\ n')。但是,當我檢查使用以下命令在Linux上,我得到了如下的結果:

cat phase1_promoter_data_PtoP1.txt | wc 

輸出:

184829 164686174 1101177922 

所以約185.000線和165個多萬字。 Visual Studio的字數爲我提供了大約1900萬。

所以我的問題是,我讀的文件是否錯誤或者Visual Studio是否對它將一次讀取的數據量有限制?我的文件需要大約1 GB的空間。

這是我使用的代碼:

try 
{ 
    using (StreamReader sr = new StreamReader("phase1_promoter_data_PtoP1.txt")) 
    { 
     String line = sr.ReadToEnd(); 
     Console.WriteLine(line); 
     String[,] data = new String[184829, 891]; 
     //List<String> data2 = new List<String>(); 

     string[] lol = line.Split('\n'); 

     for (int i = 0; i < lol.Length; i++) 
     { 
      String[] oneLine = lol[i].Split('\t'); 
      //List<String> singleLine = new List<String>(lol[i].Split('\t')); 


      for (int j = 0; j < oneLine.Length; j++) 
      { 
       //Console.WriteLine(i + " - " + lol.Length + " - " + j + " - " + oneLine.Length); 
       data[i,j] = oneLine[j]; 
      } 
     } 
     Console.WriteLine(data[3413,0]); 
    } 
} 
catch (Exception e) 
{     
    Console.WriteLine(e.Message); 
} 
+0

如果該文件包含多於3414行,則該代碼會在遇到第3415行時立即拋出一個超出範圍的異常。我也不確定你的'String line'能在你的'string [] lol'旁邊包含1GB的文本,它將包含相同的內容,但是分隔在換行符上。你確定你正在查看與「貓」相同的文件嗎? – CodeCaster 2014-10-17 10:12:43

+0

我的不好,我改變了我的數組的大小,因爲我相信我的輸出是錯誤的。但我不例外,因爲實際上有3414行加載到數組中。 – Vanquiza 2014-10-17 10:16:02

+0

也許某些行有\ r,有些有\ r \ n或\ n分隔符,並且wc將它們與ReadAllLines()區別對待? – 2014-10-17 10:18:40

回答

2

在您的Dropbox文件包含6043線。

兩個

Debug.Print(File.ReadAllLines(fPath).Count().ToString()); 

而且

Debug.Print(File.ReadAllText(fPath).Split('\n').Count().ToString()); 

顯示了同樣的結果(使用VS 2013的.NET 4.5)

我能夠通過與各行..循環

using (var sr = new StreamReader(fPath)) 
{ 
    while (!sr.EndOfStream) 
    { 
     Debug.Print(sr.ReadLine()); 
    } 
} 

And

foreach(string line in File.ReadAllLines(fPath)) 
{ 
    Debug.Print(line); 
} 

而不是整個文件讀入string一次,嘗試上述環中的一個,並建立一個數組,你循環。