0

我编写了一个简短的方法,它从 CSV 文件中读取行并根据列值构建患者。但是,当列数据不存在并引发“索引超出范围异常”时,它似乎不喜欢它。我知道这是因为该行的数组值为 0 但这可能会有所不同。我该如何解决这个问题?

在创建有效的对象之前,我尝试检查数组的长度是否超过 0,但是当数组只找到一行中的一列时,它再次抛出异常。

这是我接受文件路径的方法:

 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 回答
0

我建议你使用“??” 像这样的每个字段的运算符(当然,如果您不想使用@fvu 建议的解决方案):

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] ?? ""));
于 2013-07-23T10:47:59.947 回答