我一直在努力将字符串从文本文件转换为双数组,但无法弄清楚为什么我收到错误“文件无法读取;输入字符串不正确格式”。
我目前有一个应用程序,它以字符串形式回读文本文件的内容。我想要的是,当字符串转换为双数组时,我可以告诉控制台打印双数组,它将打印最初在字符串中的文本文件的值。
这是我的代码:
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);
}
任何人都可以解释我的代码有什么问题,以及为什么它不起作用?
答案 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)
根据MSDN,StreamReader
的构造函数的参数必须是文件的完整路径,而不仅仅是相对路径。从页面:
完整的文件路径由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所说的那样,你的一个冷值不被解析。