2016-09-23 4 views
0

FileHelpers 라이브러리를 사용하여 CSV 파일 처리 오류를 식별하고 있습니다.Filehelper는 예외 메시지를 기반으로 오류를 구분하고 레코드 문자열을 조작합니다.

var engine = new DelimitedFileEngine<ModelClass>; 
     engine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue; 
     List<object> fileEngineResult = engine.ReadFile(fullFileName).ToList(); 
errorInfo = engine.ErrorManager.Errors; 

내 ModelClass가 확인 내 CSV 파일의 각 컬럼에 해당하는 속성 나를 위해 지금

[DelimitedRecord(",")] 
[IgnoreEmptyLines] 

public class ModelClass 
{ 
    [FieldNotEmpty] 
    private string column1;  

    [FieldConverter(ConverterKind.Date, "MM/dd/yyyy")] 
    private DateTime datecolumn; 

    [FieldNotEmpty] 
    private string column3; 
} 
  1. 속성 분야에서 어떤 오류가 비어 있지 내가 처리해야합니다 때문에 중요하다 따로 따로.
  2. 중요하지 않은 오류 (이 경우 datecolumn)의 경우 잘못된 값을 null로 바꿔야합니다.

내 첫번째 요구 사항 아래의 코드 (여전히 원유 방법입니다)

List<object> criticalErrorList = new List<object>(); 
List<object> softErrorList = new List<object>(); 
foreach (var error in errorInfo) 
     { 
if (error.ExceptionInfo.InnerException.ToString().Contains("The value is empty and must be populated")) 
      { 
       criticalErrorList.Add(error); 
      } 
      else 
      { error.RecordString = //replace recordstring for the error column with null; 
       softErrorList.Add(error); 
      } 
     } 
    } 

2 요구 사항을 달성하기 위해 어떤 생각을 사용하여 달성 할 수 있을까?

답변

0

더 자세히 질문 읽기 나는 당신이 정말로 원하는 것은 datecolum 필드에 오류가있을 때 null 값을 얻는 것입니다.

나는이 대답을 먼저 썼다. 나는 당신이 그것으로부터 또한 이익을 얻을 수 있다고 생각하기 때문에 여기에 그것을 들려 줄 것이다. 필드가 누락 된 경우 null 값을 가져올 수 있으며 필드 데이터가 잘못된 경우 null 값을 얻을 수도 있습니다.

초기 대답은 (는 읽기 전용의) 기록 문자열을 변경할 필요가 없습니다 다행히

(. nullable 형식으로 누락 된 값을 처리), 그러나 당신은 달성하기 위해 FileHelpers에 뭔가 built-in를 사용 그. 날짜 열이 nullable DateTime이되도록 모델을 변경하십시오.

[FieldConverter(ConverterKind.Date, "MM/dd/yyyy")] 
private DateTime? datecolumn; 

또 다른 접근법은 날짜 열의 기본값을 원할 경우입니다.

[FieldNullValue(typeof(DateTime), "01/01/1900")] 
[FieldConverter(ConverterKind.Date, "MM/dd/yyyy")] 
private DateTime datecolumn; 

업데이트 답 : 그럼 당신은 datecolumn 멤버를 장식하는 또 다른 속성을 사용할 수

데이터가

컨버터 잘못된 경우 null 값을 가져옵니다 : 이것이 FileHelpers의 또 다른 특징입니다. 그것에 대해 자세히 알 수 있습니다 here :

따라서 날짜 열에 대해 데이터가 잘못된 경우 null 값을 가져와야한다고 가정 해 보겠습니다. datecolumn 필드를 DateTime으로 변경해야합니까? 또한 변환기가 필요합니다.당신에게, 날짜 필드는 파일에 잘못된 경우 파일을 읽을 때 더하는 오류를 얻을하고 있습니다 이제

[FieldConverter(typeof(DateConverter))] 
public DateTime? datecolumn; 

:

public class DateConverter : ConverterBase 
    { 
     public override object StringToField(string from) 
     { 
      //if you can't convert to date time.. .return null 
      DateTime date; 
      if (!DateTime.TryParse(from, out date)) 
       return null; 

      return date; 
     } 

     public override string FieldToString(object fieldValue) 
     { 
      return ((DateTime) fieldValue).ToString("MM-dd-yyyy").Replace(".", ""); 
     } 
    } 

그리고 당신의 모델 클래스에서

, 컨버터와 함께 현장을 장식 모델 클래스에서 null 값을 가져옵니다.

희망이 도움이됩니다.

+0

흠, 옵션은 훌륭합니다. 그러나 나는 또한 그것을 기록하기 위해 오류를 포착하고 레코드가 null 값이되기를 원합니다. 게다가 이러한 부드러운 오류가 int에 올 수 있습니다. int는 기대하지만 문자열은 전달됩니다. 이견있는 사람 ? 나는 당신이 주어진 해결책을 시도 할 것이다. – KeenUser

관련 문제