【问题标题】:Csvhelper - read / get a single column of all rows?Csvhelper - 读取/获取所有行的单列?
【发布时间】:2013-09-12 23:11:09
【问题描述】:

您好,我正在使用 csvHelper 读取具有可变列数的 csv 文件。第一行始终包含标题行。列数一开始不知道,有时是三列,有时是30+。行数可以很大。 我可以读取 csv 文件,但如何处理每一列数据。我需要对数据进行一些基本统计(例如 min、max、stddev),然后以非 csv 格式将它们写出来。 到目前为止,这是我的代码...

try{
    using (var fileReader = File.OpenText(inFile))
    using (var csvResult  = new CsvHelper.CsvReader(fileReader))
    {
        // read the header line   
        csvResult.Read();

        // read the whole file
        dynamic recs = csvResult.GetRecords<dynamic>().ToList();

        /* now how do I get a whole column ???
         * recs.getColumn ???
         * recs.getColumn['hadername'] ???
         */

    }
    catch (Exception ex)
    {
        MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
    }

谢谢

【问题讨论】:

    标签: c# csv csvhelper


    【解决方案1】:

    我认为图书馆不能直接这样做。您必须从各个字段中读取您的专栏并将它们添加到 List,但该过程通常很快,因为读者的工作速度很快。例如,如果您想要的列是string 类型,则代码如下:

    List<string> myStringColumn= new List<string>();
    using (var fileReader = File.OpenText(inFile))
        using (var csvResult  = new CsvHelper.CsvReader(fileReader))
        {
            while (csvResult.Read())
           {
             string stringField=csvResult.GetField<string>("Header Name");
             myStringColumn.Add(stringField);    
           }
        }
    

    【讨论】:

    • 您的代码只保存整个列中的第一个值。如果列包含 500 个值怎么办?
    【解决方案2】:
    using (System.IO.StreamReader file = new System.IO.StreamReader(Server.MapPath(filepath)))
                            {
                                //Csv reader reads the stream
                                CsvReader csvread = new CsvReader(file);
                                while (csvread.Read())
                                {
                                    int count = csvread.FieldHeaders.Count();
                                    if (count == 55)
                                    {
                                        DataRow dr = myExcelTable.NewRow();
                                        if (csvread.GetField<string>("FirstName") != null)
                                        {
                                            dr["FirstName"] = csvread.GetField<string>("FirstName"); ;
                                        }
                                        else
                                        {
                                            dr["FirstName"] = "";
                                        }
    
                                        if (csvread.GetField<string>("LastName") != null)
                                        {
                                            dr["LastName"] = csvread.GetField<string>("LastName"); ;
                                        }
                                        else
                                        {
                                            dr["LastName"] = "";
                                        }
                                    }
                                    else
                                    {
                                        lblMessage.Visible = true;
                                        lblMessage.Text = "Columns are not in specified format.";
                                        lblMessage.ForeColor = System.Drawing.Color.Red;
                                        return;
                                    }
                                }
                                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多