0

我在从文件中添加 aDouble时遇到问题。现在我以前用完全相同的文件做过这个,并将它添加到. 这是我的代码,适用于:List<double>CSVDouble Arrayarray

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不再使用 a 而是使用 a 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我不知道我在做什么,这会引发错误。谁能告诉我我做错了什么?

编辑:这是抛出的异常: 在此处输入图像描述

4

2 回答 2

3

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

"Some value","3276",Something

当您拆分时,,您最终values[1]会成为"3276"(字符串中包含双引号,而不仅仅是3276),它不能被解析为数字。我建议您使用现有的 CSV 库,例如FileHelpers或 google 来获取其他内容。

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

"Some, value","3276",Something

将分为"Somevalue""3276"Something。然后你会尝试 parse value",这显然是行不通的。出于这个原因,我不建议您只做 aReplace从您的号码中删除引号。

于 2013-05-21T19:06:23.193 回答
1

您说您的消息框显示的值为“3276”。这意味着您正在尝试做Convert.ToDouble("\"3276\"")这将引发您得到的异常。

更改以下行:

Convert.ToDouble(values[1])

至:

Convert.ToDouble(values[1].Replace("\"",""));
于 2013-05-21T19:05:52.113 回答