Csvhelper - 读取/获取所有行的单列

本文关键字:单列 获取 读取 Csvhelper | 更新日期: 2023-09-27 18:31:04

嗨,我正在使用csvHelper读取具有可变列数的csv文件。第一行始终包含一个标题行。列数起初未知,有时有三列,有时有 30+。行数可能很大。我可以读取 csv 文件,但如何处理每一列数据。我需要对数据做一些基本的统计(例如最小值、最大值、标准差),然后以非 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);
    }

谢谢

Csvhelper - 读取/获取所有行的单列

我认为

库不能直接这样做。您必须从各个字段中读取列并将它们添加到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);    
       }
    }
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;
                                }
                            }
                            }