-3

我整天都在工作,试图将文本文件中的字符串转换为双精度数组,但无法弄清楚为什么我收到错误“无法读取文件;输入字符串的格式不正确”。

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

这是我的代码:

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

4 回答 4

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

于 2013-04-11T21:05:44.920 回答
0

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

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

当它告诉您无法读取文件时,这看起来像是在指出IOException问题所在。

于 2013-04-11T21:04:59.590 回答
0

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

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

类似于...的东西

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

这是我所做的唯一更改,我可以看到控制台将每个值都打印为双精度值。

于 2013-04-11T22:06:40.527 回答
-1

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

于 2013-04-11T21:04:03.680 回答