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); 
} 

谁能弄清楚什么是错我的代码,为什么它不工作?

+5

异常正在返回的'Message'的确切用词是什么? – 2013-04-11 20:56:58

+2

我现在有最怪异的deja-vu – 2013-04-11 20:57:29

+0

检查你想转换的字符串的值是抛出异常。 – zimdanen 2013-04-11 20:57:30

一,你将无法与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

+0

谢谢你这样做的工作,但无论如何,它可以使用双数组?我需要它是一个数组。 – 2013-04-12 12:13:09

+0

@TireniDada忘了将x [i]实际设置为解析值。看到我的编辑 - 就在最后一个'WriteLine'之前 – tnw 2013-04-12 12:48:50

+0

欢呼的人感谢很多 – 2013-04-13 11:01:49

也许你正在阅读的最后一行,并没有相应的价值在那里,所以当你试图抓住转换异常。在FOR中试试fields.Length-1。或者像@罗伯特哈维说的那样,你的一个价值观冷落不了。

+1

嗯......你会认为他会得到一个“索引超出范围”的错误。这可能仍需要解决,但报告的问题很可能是在“i”变得太大之前发生的解析错误。问题很可能出现在文件的* first *输入行中。 – 2013-04-11 21:07:26

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

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

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

+0

OP在自己的代码中写入消息“无法读取文件”。 – 2013-04-11 21:05:36

+0

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")) 

这就是我所做的唯一的变化,我可以看到控制台打印每个值作为双。