2015-01-22 5 views
2

.txt 파일의 열을 계산하는 효율적인 방법이 필요합니다. 내 파일 형식 :열을 효율적으로 계산하는 방법

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

첫 번째 줄이 텍스트 형식으로 열 수를 얻기에 충분하다 :

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

그래서 나는이 일을 시도했다.

답변

6

당신은 거의입니다. 당신이 변환이 필요한 경우, 단지 이렇게 :

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

대신 CountLength 당신에게 컬렉션의 열거를 저장 사용.

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

그렇지 않으면, 당신은 여전히 ​​읽기를 항상 할 필요가, 항상 Split 라인 : 당신이 변환하지 필요성을 , 그냥 않습니다. 그 주위에는 방법이 없으므로 최대한 빨리 갈 수 있습니다.

+0

테스트하십시오! 그것은 편집 할 수 없습니다. '' '(3 개의 공백)을'''(공백 하나) 또는' ""(공백 3 개)로 변경하십시오. –

+0

@QualityCatalyst 방금 그 부분의 코드를 복사했습니다. 잘 잡아라, 나는 그것을 고쳤다. – BradleyDotNET

+0

사실 그 3 개의 공백은 "탭 구분 기호"로 사용됩니다. 여기서는 3 개의 공백을 사용합니다. 어쨌든 3 ~ 4 개의 공백 또는 다른 구분 기호는 중요하지 않습니다. – 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; 
관련 문제