1

データベースからcsvファイルを生成する必要があります。私はC#を使用していますが、これを行うことができます。私の質問は、検証に関するものです。私はこれを行うことを考えていました:

public class MyObject
{
 private string myString;
 public string MyString
 {
   get
   {
     return this.myString;
   }
   set
   {
     this.myString = value.Remove(15).PadRight(15);
   }
}

明らかに、このフィールドの最大長は 15 です。これはこれを処理するばかげた方法ですか?私は提案を受け入れます。これは、多数の異なる csv を生成するこのプログラムの氷山の一角に過ぎず、持続可能なパターンを確実に設定したいと考えています。

4

1 に答える 1

2

このパターンの問題は、単にデータを処理することで例外を飲み込んでしまうため、不良レコードを見逃すことになります。ただし、それが必要な場合は完璧です。

もう 1 つの方法は、これらのレコードをエラー リストにプッシュし、すべての処理が完了した後にユーザーが何をするかを決定できるようにすることです。したがって、次のようなことができます。

public sealed class BadRecords
{
    private static BadRecords _instance;
    public static BadRecords Instance
    {
        if (_instance == null) { _instance = new BadRecords(); }
        return _instance;
    }

    private BadRecords() { this.List = new List<MyObject>(); }

    public List<MyObject> List { get; set; }
}

public class MyObject
{
 private string myString;
 public string MyString
 {
   get
   {
     return this.myString;
   }
   set
   {
     if (value.Length > 15) { BadRecords.Instanse.List.Add(this); }
     else { this.myString = value.Remove(15).PadRight(15); }
   }
}

ただし、ソリューションにはまだ 1 つの問題があります。最初の 15 文字だけを取得しているわけではありません。実際、あなたが持っているコードは、15 文字未満の文字列でエラーになります。次のようなものを検討してください。

this.myString = value.Length > 15 ? value.Substring(0, 15) : value;

エラーを飲み込むことに固執している場合。

ただし、私が提供したソリューションでは、これを簡単に使用できます。

this.myString = value.PadRight(15);

15 文字を超えているかどうかは既に確認済みだからです。

于 2013-01-04T19:53:56.863 に答える