gpt4 book ai didi

c# - 从文本文件中读取 double 值

转载 作者:可可西里 更新时间:2023-11-01 08:17:59 25 4
gpt4 key购买 nike

尝试使用 C# 应用程序从文本文件中读取数据。有多行数据,每行都以一个整数开头,然后是一堆 double 值。文本文件的一部分如下所示,

   33 0.573140941467E-01 0.112914262390E-03 0.255553577735E-02 0.497192659486E-04 0.141869181079E-01-0.147813598922E-03
34 0.570076593453E-01 0.100112550891E-03 0.256427138318E-02-0.868691490164E-05 0.142821920093E-01-0.346011975369E-03
35 0.715507714946E-01 0.316132133031E-03-0.106581466521E-01-0.920513736900E-04 0.138018668842E-01-0.212219497066E-03

这里的 33、34、35 是整数值,后面跟着 6 个 double 值。并且不保证这些 double 值之间有空格或其他分隔符。即,如果 double 是负数,那么它前面会有一个“-”,这将占用空间。所以基本上,所有 6 个 double 值有可能在一起。

现在的挑战是,如何优雅地提取它?

我尝试过的:

String.Split(' ');

这将不起作用,因为不能保证在初始整数值和其余 double 值之间有一个空格。

这可以在 C++ 中使用 sscanf 轻松解决。

double a, b, c, d, e, f;

sscanf(string, "%d %lf%lf%lf%lf%lf%lf", &a, &b, &c, &d, &e, &f);
// here string contains a line of data from text file.

包含 double 值的文本文件是由第 3 方工具生成的,我无法控制其输出。

有没有一种方法可以优雅地逐行提取整数和 double 值?

最佳答案

如果我没看错,那么您就有了“固定宽度数据”格式。比你可以简单地分析这个事实。

即假设值在文件 d:\temp\doubles.txt 中:

void Main()
{
var filename = @"d:\temp\doubles.txt";
Func<string, string[]> split = (s) =>
{
string[] res = new string[7];
res[0] = s.Substring(0, 2);
for (int i = 0; i < 6; i++)
{
res[i + 1] = s.Substring(2 + (i * 19), 19);
}
return res;
};
var result = from l in File.ReadAllLines(filename)
let la = split(l)
select new
{
i = int.Parse(la[0]),
d1 = double.Parse(la[1]),
d2 = double.Parse(la[2]),
d3 = double.Parse(la[3]),
d4 = double.Parse(la[4]),
d5 = double.Parse(la[5]),
d6 = double.Parse(la[6])

};
foreach (var e in result)
{
Console.WriteLine($"{e.i}, {e.d1}, {e.d2}, {e.d3}, {e.d4}, {e.d5}, {e.d6}");
}
}

输出:

33, 0.0573140941467, 0.00011291426239, 0.00255553577735, 4.97192659486E-05, 0.0141869181079, -0.000147813598922
34, 0.0570076593453, 0.000100112550891, 0.00256427138318, -8.68691490164E-06, 0.0142821920093, -0.000346011975369
35, 0.0715507714946, 0.000316132133031, -0.0106581466521, -9.205137369E-05, 0.0138018668842, -0.000212219497066

PS:根据您的确切数据,int 应该分配更多空间。

关于c# - 从文本文件中读取 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57923407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com