c# - 从 CSV 读取,类型转换错误
c# - Reading From CSV, Type Conversion Error
我正在使用 CSVHelper,尽管这似乎是通过我所知道的手动方法实现的。
我正在尝试使用 csv 文件创建某种形式的 "save data" 系统,它将存储需要在程序 运行 上加载的所有重要变量。这是我的带有通用变量名的代码:
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);
为了简单起见,我展示了两种转换方法和 return 这个(在尝试转换任何东西时,是的 "day" 是一个 int)
我的 CSV 文件看起来像 这个:
2,1,
Name, True, 45
我并没有声称自己拥有最好的编码知识,但我已经达到了,虽然我真的看不出到底出了什么问题,这甚至不是我第一次阅读 csv 文件而且我以前从未经历过这样的事情。
后来我找到了解决办法,首先csvReader被声明错误,它应该被这样包围:
using (TextReader fileReader = File.OpenText(saveData))
{
var load = new CsvReader(fileReader);
\\Rest of code here\\
}
原始代码所做的是将文件路径发送到 CsvReader 而不是实际文件,这意味着第一个字段被设置为文件路径,没有其他数据存在。原始代码试图将文件路径转换为整数,这导致它崩溃。这完全解决了这个问题。
在这种特定情况下(在加载程序时加载数据)初始化您的 类 也很重要,因此为此添加一行也可以防止崩溃。
我正在使用 CSVHelper,尽管这似乎是通过我所知道的手动方法实现的。
我正在尝试使用 csv 文件创建某种形式的 "save data" 系统,它将存储需要在程序 运行 上加载的所有重要变量。这是我的带有通用变量名的代码:
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);
为了简单起见,我展示了两种转换方法和 return 这个(在尝试转换任何东西时,是的 "day" 是一个 int)
我的 CSV 文件看起来像 这个:
2,1,
Name, True, 45
我并没有声称自己拥有最好的编码知识,但我已经达到了,虽然我真的看不出到底出了什么问题,这甚至不是我第一次阅读 csv 文件而且我以前从未经历过这样的事情。
后来我找到了解决办法,首先csvReader被声明错误,它应该被这样包围:
using (TextReader fileReader = File.OpenText(saveData))
{
var load = new CsvReader(fileReader);
\\Rest of code here\\
}
原始代码所做的是将文件路径发送到 CsvReader 而不是实际文件,这意味着第一个字段被设置为文件路径,没有其他数据存在。原始代码试图将文件路径转换为整数,这导致它崩溃。这完全解决了这个问题。
在这种特定情况下(在加载程序时加载数据)初始化您的 类 也很重要,因此为此添加一行也可以防止崩溃。