c#将字符串转换为双数组
我一整天都在努力将文本文件中的字符串转换为双数组,但不明白为什么会出现错误“文件无法读取;输入字符串的格式不正确” 我目前有一个应用程序,它以字符串形式读回文本文件的内容。我希望当字符串转换为双数组时,我可以告诉控制台打印双数组,它将打印字符串中最初的文本文件的值 这是我的密码:c#将字符串转换为双数组,c#,arrays,string,double,C#,Arrays,String,Double,我一整天都在努力将文本文件中的字符串转换为双数组,但不明白为什么会出现错误“文件无法读取;输入字符串的格式不正确” 我目前有一个应用程序,它以字符串形式读回文本文件的内容。我希望当字符串转换为双数组时,我可以告诉控制台打印双数组,它将打印字符串中最初的文本文件的值 这是我的密码: double[] x = new double [3501]; 这就是我定义双数组的地方。我首先要做的是: try { using (StreamReader sr = new StreamReader("tes
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]);
}
有人能找出我的代码出了什么问题以及为什么它不起作用吗?可能您正在阅读最后一行,但那里没有值,所以当您尝试转换时,捕获异常。在FOR中尝试使用fields.Length-1。或者像@Robert Harvey所说的,您的一个值不能被解析。根据,StreamReader的构造函数的参数必须是文件的完整路径,而不仅仅是相对路径。从页面: 完整的文件路径由path参数指定。此构造函数将编码初始化为UTF8Encoding,将缓冲区大小初始化为1024字节
当它告诉您该文件无法读取时,看起来它指向的问题是
IOException
。您正在转换的一个字符串无法用ToDouble进行解析
因此,请改为这样做(在循环中):
这将捕获格式异常
,打印它无法读取的内容,然后转到循环的下一个迭代。如果它没有遇到异常,它将打印解析后的double
您可以在此处看到异常的详细信息:您必须确保您的StreamReader路径是可访问的。例如,尝试更改行:
using (StreamReader sr = new StreamReader("test.txt"))
去做一些类似于
using (StreamReader sr = new StreamReader("C:\\Zach\\Documents\\test.txt"))
这是我所做的唯一更改,我可以看到控制台将每个值打印为双精度。异常返回的消息的确切措辞是什么?我现在有最奇怪的似曾相识检查您试图转换的引发异常的字符串的值。而不是捕获e.消息e、 ToString()-这样可以得到内部异常和堆栈跟踪。哦,见鬼。没关系,它位于问题的顶部:输入字符串的格式不正确
。这几乎说明了一切;Convert.ToDouble
函数无法解析您的一个输入值。OP正在自己的代码中写入消息“文件无法读取”。呸,只要在打印异常的地方重新读取代码即可。我看到没有被读取的文件是您添加的。尽管如此,尝试将构造函数参数更改为完整路径&看看是否有帮助。嗯。。。你会认为他会得到一个“索引超出范围”的错误。这可能仍然需要修复,但报告的问题很可能是在i
变得太大之前发生的解析错误。问题最有可能出现在文件的第一个输入行中。谢谢,这确实有效,但是否仍然可以使用双数组?我有点需要它是一个数组。@TireniDada忘了实际将x[I]设置为解析值。查看我的编辑--就在最后一条WriteLine
@TireniDada之前如果这是您答案的解决方案,您介意将我的答案标记为已接受吗?很抱歉,我花了这么长时间才这样做。@TireniDada太棒了!很高兴这有帮助。
using (StreamReader sr = new StreamReader("test.txt"))
using (StreamReader sr = new StreamReader("C:\\Zach\\Documents\\test.txt"))