2013-07-05 8 views
2

CSV 파일을 읽고 XML 파일을 작성하고 싶습니다. csv 라인이 어떻게 분할되는지에 대한 기본적인 생각. 그러나 제 강령은 제게 예외를줍니다. 이해하지 못합니다.CSV 파일의 C# IndexOutOfRangeException

먼저 코드 :

static void Main(string[] args) 
    { 
     Console.WriteLine("Insert Filename please"); 
     string path = Console.ReadLine(); 

      string[] source = File.ReadAllLines(path); 
      XElement output = new XElement("Consumer", 
       from str in source 
       let fields = str.Split(',') 
       select new XElement("consumer", 
        new XElement(fields[0], 
        new XAttribute(fields[1], fields[2]), 
        new XAttribute(fields[3], fields[4]) 
        ))); 

       Console.WriteLine(output); 
       Console.ReadLine(); 
    } 

} 

} 그래서 코드 이잖아 내가 그것을 디버깅 할 때, 나는 그것의에 "OutOfRangeException을"라는 오류 메시지가 표시됩니다. 나는 이런 종류의 예외가 무엇을 의미하는지 알고 있지만, 단지 그것을위한 해결책을 찾을 수 없다. 나는 모든 문자를 쉼표로 해석했다. 따라서 일반적으로 배열은 CSV 파일의 필드 양보다 커서는 안됩니다. 내가 지금 OutOfBounds를 얻는 이유는 나를 위해 신비한 일이다.

은 읽기 :

편집을 도와 주셔서 감사합니다 : 내가 사용하는 내 CSV 파일이 손상되었습니다, 내가 도움이 아무것도 얻을 didnt가 있도록. 고정되어 코드가 작동하지만 CSV에 빈 필드가 포함되어 있지 않은 한. "이름이 Charakter로 시작할 수없는"sais라는 예외는 16 진수 값 0x20입니다.이 문제를 처리하는 방법은 잘 모릅니다 .Lumenworks의 FastCSVReader 라이브러리를 사용했지만 솔루션을 얻지 못했습니다.

+0

가'source'에있는 모든 문자열을합니까 36 개의','문자 (마지막 줄 포함)가 포함되어 있습니까? –

+1

'fields' 배열의 수를 확인하십시오. 더 많은 요소들? –

+0

소스 파일 –

답변

2
.

미만 37 개 필드가 적어도 하나 개의 라인이 있어야 아마도 빈 줄은 끝에있다

당신은 즉, 진행하기 전에 fields.Length를 확인 시도 할 수 :

XElement toXML = new XElement("Root", 
from str in source 
let fields = str.Split(',') 
where fields.Length >= 37 // <==== Check #fields 
select new XElement("Consumer", 
      new XAttribute("name", fields[0]), 
     new XElement(fields[3]), 
      new XAttribute(fields[4], fields[5]), 
      new XAttribute(fields[6], fields[7]), 
      new XAttribute(fields[8], fields[9]), 
      new XAttribute(fields[10], fields[11]), 
      new XAttribute(fields[12], fields[13]), 
      new XAttribute(fields[14], fields[15]), 
      new XAttribute(fields[16], fields[17]), 
      new XAttribute(fields[18], fields[19]), 
      new XAttribute(fields[20], fields[21]), 
     new XElement(fields[22]), 
       new XAttribute(fields[24], fields[25]), 
       new XAttribute(fields[26], fields[27]), 
       new XAttribute(fields[28], fields[29]), 
     new XElement(fields[30]), 
       new XAttribute(fields[32], ""), 
       new XAttribute(fields[33], fields[34]), 
       new XAttribute(fields[35], fields[36]))); 
+0

답장을 보내 주셔서 감사합니다. 귀하의 제안에 따라 코드를 변경했습니다. 이제는 예외가 더 이상 발생하지 않습니다. 고맙습니다. 출력은 단지 입니다. – Alika87

+0

@ Alika87 귀하의 파일 형식이 실제로 올바르지 않다고 생각합니다. 귀하의 질문에 전체 파일을 붙여 넣을 수 있습니까? –

+0

내 질문에 대한 의견에 나는 내 파일이 어떻게 생겼는지 예를 게시했다. – Alika87