2016-09-23 20 views
0

処理中のcsvファイルのエラーを特定するためにFileHelpersライブラリを使用しています。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); 
      } 
     } 
    } 

任意のアイデアを使用して、私の第一要件を達成できますか?

答えて

0

あなたの質問をもっと慎重に読んでくださいあなたが本当に欲しいのは、あなたのdatecolumフィールドにエラーがあるときにnull値を得ることです。

私はこの回答を最初に書きました。私はあなたもそれから恩恵を受けることができると思うので、私はここでそれをお伝えします。フィールドがない場合はnull値を取得し、フィールドデータが間違っている場合はnull値を取得する可能性があります。

初期の回答(NULL可能タイプで欠損値を扱う。)

幸いにも、あなたが(それは読み取り専用です)レコードの文字列を変更する必要はありませんが、あなたが達成するためにFileHelpersで何かbuilt-inを使用それ。日付列がnull可能なDateTimeになるようにモデルを変更します。

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

もう1つの方法は、日付列のデフォルト値を使用する場合です。

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

更新答え:

データが間違っているときはnull値を取得します

コンバータ: その後、datecolumnメンバーを飾るために別の属性を使用することができますこれはFileHelpersのもう1つの機能です。あなたはそれについてもっと読むことができますhere

だから、データが日付列に間違っている場合は、null値を取得する必要があるとしましょう。あなたはまだDateColumnフィールドをDateTimeに変更する必要がありますか?コンバータも必要です。あなたは、日付フィールドは、ファイル内に間違っている場合は、ファイルを読み込むときに何errosを取得していないとよ今

[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

関連する問題