在列表double中读取CSV文件和存储列

时间:2015-02-12 08:53:05

标签: c# csv

随身携带下面的代码。

class readFile{

        List<double> out1 = new List<double>();
        List<double> out2 = new List<double>();
        List<double> out3 = new List<double>();

 public readFile()
        {

        }

        public void aproCSV()
        {
            var reader = new StreamReader(File.OpenRead(@"C:\altraprova.csv"));

            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                var values = line.Split(';');

                out1.Add(values[0]);
                out2.Add(values[1]);
                out3.Add(values[2]);
            }
        }
}    

请允许我解释一下我的意图......

我打开我的csv文件

目标是读取第二列并将其插入double类型的列表中,然后获取值MAX。

如果你使用string类型的列表而不是get erors ....但由于这些值只包含你用分号分号的数字,那么我需要使用double类型..使用double类型得到以下错误:

  

错误5重载方法的最佳匹配   'System.Collections.Generic.List <double> .Add (double)'有一些   无效的参数

3 个答案:

答案 0 :(得分:1)

Split()返回string[],您的列表类型为List<double>,这意味着您需要将字符串解析为以下双打:

double value1 = double.Parse(values[0]);

然后将它们添加到您的列表中:out1.Add(value1);

请注意,您没有错误处理,因此如果该值不是double,则代码仍会抛出exception

答案 1 :(得分:1)

CSV出人意料地解析起来并不那么简单,有很多特殊情况需要考虑。例如,如果您的数据包含&#34;分隔字符&#34;您需要将数据放在引号之间(&#34;)。如果他包含引号,那么你必须用反斜杠(\)来逃避它们(或者加倍它们,我不确定)。

所以,除非你知道你要导入的数据并且确定这些情况不会发生,否则简单的&#34;拆分&#34;赢得不够。

我真的建议使用现有的解析器来帮助您完成此任务。我已成功使用CsvHelper。它是一个很好的库,很容易使用。

答案 2 :(得分:0)

您需要进行一些解析,因为通用列表只接受给定类型的元素(在您的情况下为double):

var line = reader.ReadLine();
var values = line.Split(';');

out1.Add(double.Parse(values[0]));
out2.Add(double.Parse(values[1]));
out3.Add(double.Parse(values[2]));

这是一个快速而肮脏的技巧,你应该使用double.TryParse

为了安全起见,因为可能不是你得到的所有东西都是双倍的。 从你的代码我想你需要从列表out2(你的第二列)获得最大值。为此,请使用List.Max Method