将字符串数组从文本文件转换为双精度数组时出现错误消息
Error Message when converting an array of strings from a text file to an array of doubles
我只是有一个关于我正在使用 C# 开发的程序的快速(我认为)问题。我有一个包含一长串数字的文本文件,如下所示:
41.673993158 0.000000000 258.436256
41.673992499 -0.000001364 258.462068
41.673991841 -0.000002700 258.487880
我需要创建一个数组,将每个数字分别作为双精度数(或浮点数)包含。即
Array[0] = 41.673993158
Array[1] = 0.000000000 ...etc.]
现在,我有数组中的数字,但它们都是字符串。我有以下代码:
string text = System.IO.File.ReadAllText("/Applications/Unity/Projects/Underwater/SampleFile.txt");
if (text != null)
{
string[] strings = text.Split (' ');
System.Console.WriteLine("Contents of SampleFile = ");
for (int i = 0; i < strings.Length; i++)
{
Console.WriteLine (strings[i]);
}
}
这段代码完美无缺。它在控制台的单独一行上输出每个数字,这让我相信每个数字在数组中都有自己的位置。但是,它们仍然是字符串,所以当我尝试使用以下代码将它们转换为双精度数时:
double[] nums = new double[strings.Length];
for (int i = 0; i < strings.Length; i++)
{
nums[i] = Convert.ToDouble(strings[i]);
}
我被抛出一个异常错误,但不知道为什么。这是错误消息:
System.FormatException has been thrown.
Unknown Char
Details:
double.Parse (s="258.436256\r\n41.673992499", provider={en-CA})
System.Convert.ToDouble (value="258.436256\r\n41.673992499")
在我有一个双打数组之前我不能继续我的程序,所以非常感谢任何帮助!
您可以从您的异常消息中看出,它正在尝试同时解析两个由回车 return 分隔的数字。
您按 space 拆分,但不是按行拆分。然而,将其写入控制台看起来是正确的。
更改拆分以包括 space 和 CRLF:
text.Split(new[] {" ", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);
您甚至可以结合一些 LINQ 来解析然后创建数组 - 这是一个更简洁的解决方案:
var nums = text
.Split(new[] {" ", "\r\n"}, StringSplitOptions.RemoveEmptyEntries)
.Select(double.Parse)
.ToArray();
有关工作演示,请参阅 this fiddle。
我只是有一个关于我正在使用 C# 开发的程序的快速(我认为)问题。我有一个包含一长串数字的文本文件,如下所示:
41.673993158 0.000000000 258.436256
41.673992499 -0.000001364 258.462068
41.673991841 -0.000002700 258.487880
我需要创建一个数组,将每个数字分别作为双精度数(或浮点数)包含。即
Array[0] = 41.673993158
Array[1] = 0.000000000 ...etc.]
现在,我有数组中的数字,但它们都是字符串。我有以下代码:
string text = System.IO.File.ReadAllText("/Applications/Unity/Projects/Underwater/SampleFile.txt");
if (text != null)
{
string[] strings = text.Split (' ');
System.Console.WriteLine("Contents of SampleFile = ");
for (int i = 0; i < strings.Length; i++)
{
Console.WriteLine (strings[i]);
}
}
这段代码完美无缺。它在控制台的单独一行上输出每个数字,这让我相信每个数字在数组中都有自己的位置。但是,它们仍然是字符串,所以当我尝试使用以下代码将它们转换为双精度数时:
double[] nums = new double[strings.Length];
for (int i = 0; i < strings.Length; i++)
{
nums[i] = Convert.ToDouble(strings[i]);
}
我被抛出一个异常错误,但不知道为什么。这是错误消息:
System.FormatException has been thrown.
Unknown Char
Details: double.Parse (s="258.436256\r\n41.673992499", provider={en-CA})
System.Convert.ToDouble (value="258.436256\r\n41.673992499")
在我有一个双打数组之前我不能继续我的程序,所以非常感谢任何帮助!
您可以从您的异常消息中看出,它正在尝试同时解析两个由回车 return 分隔的数字。
您按 space 拆分,但不是按行拆分。然而,将其写入控制台看起来是正确的。
更改拆分以包括 space 和 CRLF:
text.Split(new[] {" ", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);
您甚至可以结合一些 LINQ 来解析然后创建数组 - 这是一个更简洁的解决方案:
var nums = text
.Split(new[] {" ", "\r\n"}, StringSplitOptions.RemoveEmptyEntries)
.Select(double.Parse)
.ToArray();
有关工作演示,请参阅 this fiddle。