c# - 从CSV读取,类型转换错误

时间:2018-04-19 15:06:36

标签: c# csv type-conversion csvhelper

我正在使用CSVHelper,虽然这似乎与我所知的手动方法有关。

我正在尝试使用csv文件创建某种形式的“保存数据”系统,该系统将存储需要在正在运行的程序上加载的所有重要变量。这是我的代码,带有通用变量名:

        StringReader csv = new StringReader(SaveData);
        var load = new CsvReader(csv);
        string convertableString = "";
        load.Read();

        convertableString = load.GetField(0);
        day = Convert.ToInt32(convertableString);
        numberOfObjects = load.GetField<int>(1);

        for (int i = 0; i < numberOfObjects; i++)
        {
            load.Read();

            myObject[i].objName = load.GetField(0);
            myObject[i].objBool = load.GetField<bool>(1);
            myObject[i].objInt = load.GetField<int>(2);
        }

将字符串转换为其他变量类型的行会触发以下错误:

System.FormatException: 'Input string was not in a correct format.'

具体来说,抛弃它的第一行是:

day = Convert.ToInt32(convertableString);

这也适用于CSV Helper的转换方法,但这样就行了(注意这需要删除它上面的行):

day = load.GetField<int>(0);

为了简单起见,我正在显示两种转换方法,并且都返回此(在尝试转换任何内容时,是“day”是一个int)

我的CSV文件看起来像 this

2,1,
Name, True, 45

我没有声称拥有最好的编码知识,但我已经到了那里,虽然我无法确切地看到究竟出了什么问题,这甚至不是我第一次阅读csv文件而且我已经从来没有经历过这样的事情。

1 个答案:

答案 0 :(得分:0)

我已经找到了解决方案,首先声明了csvReader错误,它应该被这个包围:

using (TextReader fileReader = File.OpenText(saveData))
{
    var load = new CsvReader(fileReader);

    \\\Rest of code here\\\

}

原始代码所做的是将文件路径发送到CsvReader而不是实际文件,这意味着第一个字段设置为文件路径,没有其他数据存在。原始代码试图将文件路径转换为整数,这导致它崩溃。这完全解决了这个问题。

在这个特定场景中(加载加载程序的数据),初始化类也很重要,因此为此添加一行也可以防止崩溃。