如何读取所有双数并将其保存在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);
}
答案 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 []。
编辑:修改了正则表达式以处理原始文件没有的双打(包括,令人尴尬的是,负数。)