2014-10-17 6 views
1

Я пытаюсь редактировать некоторые данные в файле с помощью Visual Studio C#. Я пробовал использовать обаМаксимальное количество данных в файле в C#?

StreamReader and File.ReadAllLines/ReadAllText 

Оба результата дают мне 3414 строк содержимого. Я использовал «Split» («\ n») после «ReadAllText». Но когда я проверяю с помощью следующей команды на Linux я получаю результаты следуют:

cat phase1_promoter_data_PtoP1.txt | wc 

Выход:

184829 164686174 1101177922 

Так около 185,000 линий и 165 миллионов слов. Количество слов на Visual Studio дает мне около 19 миллионов.

Итак, мой вопрос: я читаю файл неправильно или у Visual Studio есть ограничение на количество данных, которое он будет читать сразу? Мой файл занимает около 1 ГБ пространства.

Вот код, я использую:

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-й строкой. Я также не уверен, что ваша строка строки может содержать 1 ГБ текста рядом с вашей 'string [] lol', которая будет содержать то же самое, но разделена на новую строку. Вы уверены, что ищете тот же файл, что и тот, который вы кормите на 'cat'? – CodeCaster

+0

Мой плохой, я изменил размер моего массива, потому что я полагал, что мой результат был неправильным. Но я не получаю исключения, потому что на самом деле в массив загружено 3414 строк. – Vanquiza

+0

Возможно, некоторые строки имеют \ r, а некоторые имеют \ r \ n или \ n разделители, а wc обрабатывает их иначе, чем ReadAllLines()? –

ответ

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()); 
    } 
} 

И

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

Вместо того, чтобы читать весь файл в string сразу, попробуйте одну из представленных выше петель и построить массив, как вы цикл через.

Смежные вопросы