2015-01-22 3 views
2

Мне нужен эффективный способ подсчета столбцов в .txt-файле. Мой формат файла:Эффективный способ подсчета столбцов

123.222 333.333 454.45 453.333 
14.222 3.333 434.45 423.333 
33.2 223.333 434.45 153.333 

Так что я попытался это:

StreamReader sr = new StreamReader(_path); 
int ColumnsCount = Array.ConvertAll(sr.ReadLine().Split(' '), Double.Parse).Count(); 

Первая линия достаточно, чтобы получить количество столбцов в этом текстовом формате.

ответ

6

Вы являетесь почти так быстро, как только сможете. Если вам необходимо преобразование, просто сделать это:

int ColumnsCount = Array.ConvertAll(sr.ReadLine().Split(' '), Double.Parse).Length; 

Length Использование вместо Count экономит ваше перечисление коллекции. Если вы сделать не необходимость преобразования, просто сделать:

sr.ReadLine().Split(' ').Length; 

В противном случае, вы должны всегда делать читать, и всегда Split линия. Так как этого не происходит, так быстро, как только можно.

+0

Проверьте это! Он не компилируется. Измените '' '' (три пробела) на '' '' (один пробел) или '' '' (три пробела). –

+0

@QualityCatalyst Я просто скопировал его код для этой части. Хороший улов, хотя, я исправил его. – BradleyDotNET

+0

На самом деле его не три заготовки «разделитель табуляции», пока я не могу использовать его здесь. Я просто использую три пробела, так или иначе, это не вопрос. Три или четыре пробела или любой другой разделитель не имеет значения ... – Finchsize

1

Вы можете избежать double.Parse, так как вас интересует только кол-во столбцов и используют Split с удалением пустых записей. Вы можете также использовать File.ReadLine и просто прочитать первую строку:

string firstLine = File.ReadLines("filePath").First(); 
int ColumnsCount = 0; 
if (firstLine != null) 
{ 
    ColumnsCount = firstLine.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries).Length; 
} 

Насколько быстрее это будет, я не уверен, даже если там будет разница, я считаю, что это будет незначительным.

0

Вот быстрый ответ на этот вопрос. Нет необходимости выполнять разделение строк, просто обрабатывать строку как массив символов и подсчитывать пробелы. Это также предполагает, что вы не можете иметь таблицу столбцов 0.

var columnCount = 1; 
foreach(var c in File.ReadLines("filePath").First() ?? String.Empty) 
{ 
    if (c == ' ') 
    { 
     columnCount++; 
    } 
} 

return columnCount; 
Смежные вопросы