0

CSV ファイルから行を読み取り、列の値から患者を作成する短いメソッドを作成しました。ただし、列データが存在せず、「インデックスが範囲外の例外」をスローする場合、それは気に入らないようです。これは、その行の配列値が 0 であるためだと理解していますが、これは異なる可能性があります。どうすればこれを回避できますか?

機能するオブジェクトを作成する前に、配列の長さが0を超えているかどうかを確認しようとしましたが、配列が行に1列しか見つからなかったときに再び例外をスローしました。

ファイルパスを受け入れる私の方法は次のとおりです。

 public static List<PatientObject> SplitFiles(String file)
        {
            List<PatientObject> PatientList = new List<PatientObject>();


                var reader = new StreamReader(File.OpenRead(file));

                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    var values = line.Split('|');


                    PatientList.Add(new PatientObject(values[0], values[1], values[2], values[3], values[4], values[5], values[6], values[7], values[8], values[9], values[10], values[11], values[12], values[13], values[14], values[15], values[16], values[17]));

                }

            return PatientList;

        }

前もって感謝します

4

2 に答える 2

2

実際に取得するフィールドの数をまったくチェックしていないため、行に少なくとも 18 個の値がない場合はもちろんクラッシュします。最適な解決策は正確な状況によって異なりますが、考えられるいくつかのアプローチを次に示します。

  • 少なくとも、行に 18 個以上の要素がない場合は、その行をスキップする必要があります。後の混乱を避けるために、スキップしたという事実をログに記録する必要があります。
  • 要素が 18 未満の場合は、デフォルト値をデータベースにフィードするか、そのフィールドに入力がなかったことを示す値をフィードできる可能性があります。

編集: 既存の CSV 読み取りライブラリに切り替えることもできます。不足しているフィールドのシナリオに対していくつかのソリューションが提供されている場合、私はA Fast CSV Readerを使用して成功しました。

于 2013-07-23T10:25:18.143 に答える