c#将string转换为double数组

时间:2013-04-11 20:55:24

标签: c# arrays string double

我一直在努力将字符串从文本文件转换为双数组,但无法弄清楚为什么我收到错误“文件无法读取;输入字符串不正确格式”。

我目前有一个应用程序,它以字符串形式回读文本文件的内容。我想要的是,当字符串转换为双数组时,我可以告诉控制台打印双数组,它将打印最初在字符串中的文本文件的值。

这是我的代码:

double[] x = new double [3501];

这是我定义双数组的地方。我先这样做:

try
{
  using (StreamReader sr = new StreamReader("test.txt"))
  {
     String line =  sr.ReadToEnd();
     string[] fields = line.Split(new char[] { ' ' });
     x = new double [fields.Length];

     for (int i = 0; i < fields.Length; i++)
     {
        x[i] = Convert.ToDouble(fields[i]);
        Console.WriteLine(x[i]);
     }

Line是输入字符串,其中包含一个满数字的列,然后进行拆分。然后我告诉它打印x [i]的内容,但是当抛出异常时就是这样:

catch (Exception e)
{
   // Log the exception and quit...                
   Console.WriteLine("The file could not be read:");
   Console.WriteLine(e.Message);
}

任何人都可以解释我的代码有什么问题,以及为什么它不起作用?

4 个答案:

答案 0 :(得分:4)

您转换的其中一个字符串无法使用ToDouble

进行解析

所以这样做(在你的循环中):

double parsed = 0;
try 
{
    parsed = Convert.ToDouble(fields[i]);
}
catch (FormatException e) 
{ 
    Console.WriteLine("Couldn't parse '{0}'", fields[i]);
    continue;
}

x[i] = parsed;
Console.WriteLine(parsed);

这将捕获FormatException,打印它无法读取的内容,然后转到循环的下一次迭代。如果它没有遇到异常,它将打印解析的双精度。

您可以在此处查看例外:http://msdn.microsoft.com/en-us/library/zh1hkw6k.aspx

答案 1 :(得分:0)

根据MSDNStreamReader的构造函数的参数必须是文件的完整路径,而不仅仅是相对路径。从页面:

  

完整的文件路径由path参数指定。此构造函数将编码初始化为UTF8Encoding,缓冲区大小为1024字节。

当它告诉你无法读取文件时,看起来它指向IOException作为问题。

答案 2 :(得分:0)

您必须确保可以访问StreamReader路径。例如,尝试更改行:

using (StreamReader sr = new StreamReader("test.txt"))

以某种方式......

using (StreamReader sr = new StreamReader("C:\\Zach\\Documents\\test.txt"))

这是我做的唯一改变,我可以看到控制台将每个值打印为双倍。

答案 3 :(得分:-1)

也许你正在阅读最后一行并且那里没有值,所以当你尝试转换捕获异常时。尝试在你的FOR中使用fields.Length-1。或者像@Robert Harvey所说的那样,你的一个冷值不被解析。