2014-01-10 4 views
0

파일에서 공백으로 구분 된 숫자를 읽으려고합니다.파일을 한 줄로 읽는 방법?

using (var streamReader = new StreamReader("save.txt", Encoding.UTF8)) 
{ 
    list = streamReader.ReadToEnd().Split(new char[] { ' ' }, 1).Select(n => int.Parse(n)).ToList(); 
} 

내가 전체 파일의 문자열을 포함하는 내용을 beeing는 nint.Parse(n)에서 내가 System.FormatException를 얻을이 코드를 실행하려고 . 왜이 예외가 발생하는지 이해한다면 왜 Split() 메서드가 작동하지 않는지 알 수 없습니까?

+1

"한 줄"에 무엇인가 넣는 것은 모호한 목표입니다. 전체 프로그램을 한 줄로 작성하면 더 나 빠질 수 있습니다. –

답변

4

Split(new char[] { ' ' }, 1)에 불필요한 1 매개 변수가 있습니다. 즉, 하나의 요소 만 반환됩니다. RemoveEmptyEntries 옵션을 사용하는 것이 더 안전합니다. 또한 File.ReadAllText의 도움으로 파일 읽기 단순화 할 수 있습니다 :

File.ReadAllText("path") 
    .Split(new [] { ' ' }, StringSplitOptions.RemoveEmptyEntries) 
    .Select(n => int.Parse(n)) 
    .ToList(); 
2

문자열을 분할에 사용되는 문자의 목록에 1가, 그것은 그것이 작동하는 제거합니다.

list = streamReader.ReadToEnd() 
     .Split(new char[] { ' ' }) 
     .Select(n => int.Parse(n)).ToList(); 

1을 남겨두면 스플릿의 결과는 하나의 요소로 이루어진 배열이됩니다. 이 입력 문자열이있는 경우 예를 들어

string input = "1 2 3 4 5"; 
string[] result = input.Split(new char[] {' '}, 1); 

결과는 배열 물론이

result.Length == 1; // true 
result[0] == "1 2 3 4 5"; // true 

int.Parse("1 2 3 4 5") 

위의 오류를 제공 문자열을 전달처럼 될 것입니다.

1

필자는 항상 File.ReadAllLines()가 좋았으며, .Net 2.0으로 돌아가고 내 onw의 코드를 작성할 필요가 없습니다.

관련 문제