2014-08-28 3 views
3

FileHelpers를 사용하여 탭으로 구분 된 파일을 구문 분석하고 있습니다.C# FileHelpers 탭에서 nulls 구분 된 파일

널 (null) 값은 FieldNullValue 속성을 사용 후 무시하고 내가 로그인 오류와 함께 종료하고

필드 라인 4에서 '이름을 제출 한'후

찾을 수 없습니다

(기록 적은있다 구분 기호가 잘못되었거나 다음 필드가 선택 사항으로 표시되어야 함). 구분의

클래스 정의 : 내가 탭을 다시 다시 볼 수 있습니다

[FieldTrim(TrimMode.Both)] 
[FieldNullValue("NULL")] 
[FieldQuoted('"', QuoteMode.OptionalForRead, MultilineMode.AllowForRead)] 
public String initials; 

는 16 진수 편집기에서 가져온 파일을 보면 :

[DelimitedRecord("\t")] 

필드는 동일한 속성을 가진 모든 문자열 chars (09 09)는 null 필드라고 가정합니다.

file line in hex view

당신이 5 & 9 null의 화면 캡처 필드에서 볼 수 있듯이. 이것들은 filehelper 파서에 의해 무시됩니다. 아무도 이유를 아나요?

+0

무엇이 문제입니까? –

+0

필드 수에 대한 오류를 throw하는 대신 null 값이 FieldNullValue 특성으로 대체되지 않는 이유 –

+0

입력 형식을 변경한다는 의미입니까? 그렇다면 옵션이 아닙니다. 프로그래밍 방식으로 모든 이중 탭을 빈 문자열로 바꾸기 위해 먼저 파일을 편집하는 경로를 고려하고 있지만 실제로 그 경로를 사용하지 않았습니다. –

답변

1

속성을 제거 :

[FieldTrim(TrimMode.Both)] 

문제를 해결 한 것으로 보인다.

+1

나는 이것을 쓰려고하고 있었다. –

2

나는 두 가지 문제가 있다고 생각합니다.

첫째, FileHelpers는 하나 이상의 탭을 기다리고 있습니다. 한 가지 쉬운 해결 방법은 마지막 필드를 [FieldOptional] 속성으로 표시하는 것입니다.

둘째, FieldNullValue("NULL")은 다음을 의미합니다. 파일의 필드 값이 null 인 경우 "NULL"문자열로 설정합니다. 파일의 값은 null이 아니라 ""입니다. 당신이 뭔가에 빈 값을 변환해야하는 경우, 다음과 같이 a custom converter를 사용할 수 있습니다

public class MyEmptyFieldConverter : ConverterBase 
{ 
    protected override bool CustomNullHandling 
    { 
     /// you need to tell the converter not 
     /// to handle empty values automatically 
     get { return true; } 
    } 

    public override object StringToField(string from) 
    { 
     if (String.IsNullOrWhiteSpace(from)) 
      return "NULL"; 
     return from; 
    } 
} 

을 다음 필드에 속성을 추가 할 수 있습니다.

[FieldConverter(typeof(MyEmptyFieldConverter))] 
public string field9; 
관련 문제