从.csv文件读取到双数组

时间:2017-04-04 08:58:33

标签: c# arrays linq csv

我有一个关于LINQ查询和返回类型的问题。我只想读取.csv文件中的值,其中有双分号由分号分隔,如下所示:

0016; 0010; -0,020; -0,014; 0020; 0016; -0,019; -0,014; 0023;

使用以下语句从文件读取工作正常:

        double pdValue;
        double[] pdValues;

        var values = File.ReadAllLines(path)
            .Select(a => a.Split(';')
            .Select(str => double.TryParse(str, out pdValue) ? pdValue : 0));

        pdValues = values.ToArray();

但最后一行返回'无法隐式转换System.Collections.Generic.IENumerable<双>加倍[]'错误。试图让它与数组一起使用会将错误更改为'无法隐式转换System.Collections.Generic.IENumerable< double> [] to double []'。

调试时,我已经可以看到values变量将文件中的所有值(不知何故)保存为数组...

我找不到任何东西,什么能给我一个暗示我究竟在这里做错了什么。有人能帮助我吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

查看values变量类型IEnumerable<IEnumerable<double>>。您应该使用以下代码:

 var values = File.ReadAllLines(path)
            .SelectMany(a => a.Split(';')
            .Select(str => double.TryParse(str, out pdValue) ? pdValue : 0));

pdValues = values.ToArray();

答案 1 :(得分:0)

ReadAllLine方法将返回一个字符串数组(比如说数组A)。您使用的Split方法将为您提供一个由“;”分隔的字符串数组对于Array A的每个项目。因此最终结果将是一个数组数组。这就是错误的原因。

您可以尝试:

var values = File.ReadAllLines(path).ToString()
            .Split(';').Select(str => double.TryParse(str, out pdValue) ? pdValue : 0);