c#将字符串转换为双数组
我一直在努力将字符串从文本文件转换为双数组,但无法弄清楚为什么我得到错误“文件无法读取;输入字符串的格式不正确“。c#将字符串转换为双数组
我目前有一个应用程序读回字符串中的文本文件的内容。我希望当字符串转换为双数组时,我可以告诉控制台打印双数组,并且它将打印最初在字符串中的文本文件的值。
这里是我的代码:
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]);
}
行是输入字符串,其中包含充满数字的列,然后进行拆分。那么我告诉它打印x的内容[I]但这就是当一个异常被抛出:
catch (Exception e)
{
// Log the exception and quit...
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
}
谁能弄清楚什么是错我的代码,为什么它不工作?
一,你将无法与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
,打印它所couldn没有阅读,并进入下一个迭代循环。如果它没有遇到异常,它将打印解析后的double。
你可以看到除了在这里详细描述:http://msdn.microsoft.com/en-us/library/zh1hkw6k.aspx
谢谢你这样做的工作,但无论如何,它可以使用双数组?我需要它是一个数组。 – 2013-04-12 12:13:09
@TireniDada忘了将x [i]实际设置为解析值。看到我的编辑 - 就在最后一个'WriteLine'之前 – tnw 2013-04-12 12:48:50
欢呼的人感谢很多 – 2013-04-13 11:01:49
也许你正在阅读的最后一行,并没有相应的价值在那里,所以当你试图抓住转换异常。在FOR中试试fields.Length-1。或者像@罗伯特哈维说的那样,你的一个价值观冷落不了。
嗯......你会认为他会得到一个“索引超出范围”的错误。这可能仍需要解决,但报告的问题很可能是在“i”变得太大之前发生的解析错误。问题很可能出现在文件的* first *输入行中。 – 2013-04-11 21:07:26
根据MSDN,StreamReader
的构造函数的参数必须是文件的完整路径,而不仅仅是相对路径。来自页面:
完整的文件路径由路径参数指定。此构造函数将编码初始化为UTF8Encoding,缓冲区大小为1024字节。
当它告诉你文件无法被读取时,它看起来像是指向IOException
是问题所在。
OP在自己的代码中写入消息“无法读取文件”。 – 2013-04-11 21:05:36
Bah,只需重新读取您打印异常的代码。我看到文件没有被读取是你添加的东西。尽管如此,请尝试将构造函数参数更改为完整路径并查看是否有帮助。 – 2013-04-11 21:07:01
你必须确保你的StreamReader路径访问。例如,尝试改变路线:
using (StreamReader sr = new StreamReader("test.txt"))
沿着线的东西...
using (StreamReader sr = new StreamReader("C:\\Zach\\Documents\\test.txt"))
这就是我所做的唯一的变化,我可以看到控制台打印每个值作为双。
异常正在返回的'Message'的确切用词是什么? – 2013-04-11 20:56:58
我现在有最怪异的deja-vu – 2013-04-11 20:57:29
检查你想转换的字符串的值是抛出异常。 – zimdanen 2013-04-11 20:57:30