我从Double
文件向List<double>
添加CSV
时出现问题。现在,我之前使用完全相同的文件完成了此操作,并将其添加到Double Array
。
这是我的代码与array
:
double[] ch1Array = new double[arraySize];
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string fileName = Path.Combine(filePath, openFileDialog1.FileName);
var reader = new StreamReader(File.OpenRead(fileName));
while(!reader.EndOfStream)
{
var line = reader.ReadLine(); //Get through the column titles
var values = line.Split(',');
if (dataSize > 0)
{
try
{
ch1Array[dataSize] = Convert.ToDouble(values[1]);
//etc...
此代码完美无缺,我唯一改变的是我不再使用Array
,而是使用List<double>
:
List<double> ch1Array = new List<double>();
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
//Create stream reader and open file
string fileName = Path.Combine(mainFilePath, openFileDialog1.FileName);
var reader = new StreamReader(File.OpenRead(fileName));
int counter = 0;
//Read document until end of stream
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
try
{
ch1Array.Add(Convert.ToDouble(values[1]));
//etc..
现在我假设我使用List
错误(这是我第一次使用Lists
)。一旦程序到达该部分(它编译并运行正常)它告诉我我有一个错误,我的输入字符串格式不正确。但是因为我可以在其他上下文中使用变量values[1]
作为Double
我不知道我在做什么就是抛出错误。
谁能告诉我我做错了什么?
编辑:这是抛出的异常:
答案 0 :(得分:3)
问题是您没有正确解析CSV文件。它看起来像这样:
"Some value","3276",Something
当您在,
上拆分时,最终values[1]
为"3276"
(其中包含双引号的字符串,而不仅仅是3276
),这不是解析为数字。我建议您使用现有的CSV库,例如FileHelpers或谷歌搜索其他内容。
分割,
时的另一个问题是,如果值包含逗号,例如:
"Some, value","3276",Something
将分为"Some
,value"
,"3276"
和Something
。然后,您将尝试解析value"
,这显然无效。出于这个原因,我不建议只使用Replace
从您的号码中删除引号。
答案 1 :(得分:1)
您说您的消息框显示的值为“3276”。这意味着您正在尝试执行Convert.ToDouble("\"3276\"")
,这会抛出您正在获得的异常。
更改以下行:
Convert.ToDouble(values[1])
要:
Convert.ToDouble(values[1].Replace("\"",""));