将字符串数组从文本文件转换为双精度数组时出现错误消息

时间:2016-06-03 16:05:13

标签: c# monodevelop

我刚才有一个关于我正在使用C#编写的程序的快速(我认为)问题。我有一个包含很长数字列表的文本文件,如下所示:

41.673993158 0.000000000 258.436256

41.673992499 -0.000001364 258.462068

41.673991841 -0.000002700 258.487880

我需要创建一个数组,将每个数字分别包含为double(或float)。即

Array[0] = 41.673993158

Array[1] = 0.000000000 ...etc.]

现在,我在数组中有数字,但它们都是字符串。我有以下代码:

 string text = System.IO.File.ReadAllText("/Applications/Unity/Projects/Underwater/SampleFile.txt");
 if (text != null)
 {

     string[] strings = text.Split (' ');

     System.Console.WriteLine("Contents of SampleFile = ");
     for (int i = 0; i < strings.Length; i++) 
     {
         Console.WriteLine (strings[i]);
     }
  }

此代码非常完美。它在控制台中的一个单独的行上输出每个数字,这使我相信每个数字在数组中都有它自己的位置。但是,它们仍然是字符串,所以当我尝试使用此代码将它们转换为双精度时:

double[] nums = new double[strings.Length];
for (int i = 0; i < strings.Length; i++)
{
    nums[i] = Convert.ToDouble(strings[i]);
}     

我抛出异常错误,无法弄清楚原因。这是错误消息:

  

抛出了System.FormatException。

     

未知字符

     

详细说明:     double.Parse(s =“258.436256 \ r \ n \ n41.673992499”,provider = {en-CA})

     

System.Convert.ToDouble(value =“258.436256 \ r \ n \ n41.673992499”)

在我有一系列双打之前,我无法继续我的计划,所以非常感谢任何帮助!

1 个答案:

答案 0 :(得分:7)

您可以从异常消息中看到它试图一次解析两个由回车符分隔的数字。

你按空间划分,但不是按行划分。然而,将此文件写入控制台看起来是正确的。

更改您的拆分以包含空格和CRLF:

text.Split(new[] {" ", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);

您甚至可以与一些LINQ结合使用来解析然后创建数组 - 这是一个非常简单的解决方案:

var nums = text
    .Split(new[] {" ", "\r\n"}, StringSplitOptions.RemoveEmptyEntries)
    .Select(double.Parse)
    .ToArray();

有关正常工作的演示,请参阅this fiddle