C#从.txt文件读取双数字

时间:2017-11-07 18:43:56

标签: c# file

如何读取所有双数并将其保存在txt文件的数组中? 我不知道数字元素。 在文件中也可以是字母和其他标志。 .txt文件中的数字:

2.3 g -0.2 s 1.2 5.8

2.0 .

-1.8 -7.6 1 46.1

我试过了:

List<double>numbers = new List<double>();
using (FileStream fs = File.OpenRead("C:\\...\\Desktop\\file.txt"))
{
   BinaryReader reader = new BinaryReader(fs);

   double doubleVal = reader.ReadSingle();
   numbers.Add(doubleVal);
}

2 个答案:

答案 0 :(得分:1)

一点点linq就足够了

var numbers = File.ReadAllText(@"d:\temp\a.txt")
            .Split()
            .Where(n => !string.IsNullOrWhiteSpace(n))
            .Select(n => double.Parse(n, CultureInfo.InvariantCulture))
            .ToList();

修改 OP在半小时后的评论:不,我不保证细丝只包含双打和空白。也可以写信。

这当然会使一些假设失效..... 在这种情况下,新的 Where 子句将是.Where(n => double.TryParse(n, out double x)),它在c#7中引入

编辑2

最后,在所有这些评论之后,使用c#7:

var numbers = File.ReadLines(@"d:\temp\a.txt")
        .SelectMany(line => line.Split()
                            .Select(s => (double.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out double d), d)))
        .Where(n => n.Item1)
        .Select(n => n.Item2)
        .ToList();

答案 1 :(得分:0)

正则表达能力唤醒!

string sampleString = "1.2 3 2.4\r\n3 a 9.4 3";  // you'd ordinarily get this from the file.
Regex myRegex = new Regex(@"-?[0-9](?:\.[0-9]+)?|NaN|-Infinity|Infinity");
MatchCollection matches = myRegex.Matches(sampleString);
double[] nums = matches.Cast<Match>().Select(m => double.Parse(m.Value)).ToArray();

开玩笑说,基本上,您可以使用正则表达式查找任何类型模式的所有匹配项。上面代码中的那个只是查找:

  • 一个或多个数字,后跟一个句号,后跟一个或多个 编号

......或......

  • 一个或多个数字

然后使用一些LINQ黑魔法将MatchCollection转换为double []。

编辑:修改了正则表达式以处理原始文件没有的双打(包括,令人尴尬的是,负数。)