2012-07-06 1 views
2

현재 FileHelpers 라이브러리 (v2.0.0.0)를 사용하여 CSV 파일을 구문 분석하고 있습니다. CSV 파일은 소수의 공용 속성이있는 클래스에 매핑됩니다. N이 있다고 가정 해 봅시다. 문제는 기본적으로 FileHelpers가 사용자가 N-1 쉼표보다 많은 CSV 파일을 지정하는 경우를 올바르게 처리하지 않는 것입니다. 나머지 쉼표는 마지막 속성 값에 추가됩니다.초과 쉼표로 CSV 파일을 처리하는 FileHelpers 2.0 받기

이것은 FileHelpers' attributes을 통해 구성 할 수 있어야한다고 생각했지만 레코드에 일치하는 속성이없는 입력란을 무시하는 것을 보지 못했습니다.

나는 ExcludeIfEnds (",")와 같은 것을 사용하여 쉼표로 끝나면 줄을 건너 뛰는 것처럼 보입니다.하지만 줄 바꿈 만하면됩니다.

그것은 내 유일한 수단이있을 가능성이 파일을 사전 처리 및 완전히 괜찮 후행 쉼표, 을 제거,하지만 난 FileHelpers뿐만 아니라이 작업을 수행 할 수 있는지 알고 싶어하고, 아마 난 그냥 아니에요하기 문서에서 보았습니다.

답변

2

그냥 생각 : 당신은 ...

"ExtraCommas"라는 속성을 만들고 추가 쉼표가 개체의 실제 속성 직렬화 거기되지 않도록, 클래스에 추가 할 수 있습니다
+0

나는 그것을 좋아하고 그것도 생각조차하지 못했다. 나는 그것을 시도 할 것이다. – Dave

+0

@Dave를 따라야하고'[FieldOptional]'속성도 추가해야합니다. 추가 필드에 대해서는 [documentation] (http://www.filehelpers.com/FileHelpers.FieldOptionalAttribute.html)을 참조하십시오. – shamp00

0

쉼표 수가 다를 경우 운이 좋지 않아 사후 처리가 필요합니다. 그러나 고정 된 금액이있는 경우 클래스에 빈 필드를 설정할 수 있습니다. 나는 비즈니스 클래스로 FileHelpers 클래스를 사용하지 않기 때문에

[FieldOrder(5)] 
public string Blank1; 

[FieldOrder(6)] 
public string Blank2; 

이 정말 지금까지 내가에서 비즈니스 클래스를 구축 할 수있는 객체로 사용, 저를 물지 않습니다. 나는 그것을 감사를 위해 보관한다. 어느 시점에서 나는 블랭크스 필드를 비공개로 만들었고, 그것이 어떻게 드러났는지 확신하지 못했습니다. 해킹/해결 방법에 대한

+0

제안 해 주셔서 감사합니다. 불행히도 FileHelpers 2.0에는이 속성이 없으며 사용중인 버전입니다. 나는 OP를 갱신 할 것이다. – Dave

+0

FieldOrder가 필요하지 않습니다. 필자는 결코 신경 쓰지 않았던 "모범 사례"이기 때문에 방금 FieldIrder를 왼쪽에 두었습니다. 내 솔루션은 쉼표 수를 계산 한 다음 클래스 끝 부분에 BlankN, BlankN + 1이라는 팬텀 필드를 추가하는 것입니다. (그걸 알고 떠나지 않았다. 감사합니다!) –

0

다음은 사용할 수있는 사용자 지정 방법이지만 최상의 솔루션은 아니지만 마지막 쉼표 문제가 해결됩니다. 코드가 더욱 최적화 될 수 있습니다. 이것은 단지 이런 종류의 문제를 해결하는 방법에 대한 아이디어를 제공하기위한 것입니다.

int main(){ 
    StreamReader sr = new StreamReader(@"C:\Users\musab.shaheed\Desktop\csv.csv"); 
    var lineCount=File.ReadLines(@"C:\Users\musab.shaheed\Desktop\csv.csv").Count(); 
      for (int i = 0; i < lineCount;i++) { 

      String fileText = sr.ReadLine(); 

      fileText=fileText.Substring(0, fileText.Length - 1); 


      //store your data in here 
      Console.WriteLine(fileText); 


      }; 

      sr.Close(); 

} 
관련 문제