将Double添加到List <double> </double>的问题

时间:2013-05-21 18:40:34

标签: c# list csv double

我从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我不知道我在做什么就是抛出错误。 谁能告诉我我做错了什么?

编辑:这是抛出的异常: enter image description here

2 个答案:

答案 0 :(得分:3)

问题是您没有正确解析CSV文件。它看起来像这样:

"Some value","3276",Something

当您在,上拆分时,最终values[1]"3276"(其中包含双引号的字符串,而不仅仅是3276),这不是解析为数字。我建议您使用现有的CSV库,例如FileHelpers或谷歌搜索其他内容。

分割,时的另一个问题是,如果值包含逗号,例如:

"Some, value","3276",Something

将分为"Somevalue""3276"Something。然后,您将尝试解析value",这显然无效。出于这个原因,我不建议只使用Replace从您的号码中删除引号。

答案 1 :(得分:1)

您说您的消息框显示的值为“3276”。这意味着您正在尝试执行Convert.ToDouble("\"3276\""),这会抛出您正在获得的异常。

更改以下行:

Convert.ToDouble(values[1])

要:

Convert.ToDouble(values[1].Replace("\"",""));