2

嗨,我正在使用 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);
    }

谢谢

4

2 回答 2

10

我认为图书馆不能直接这样做。您必须从各个字段中读取您的专栏并将它们添加到 aList中,但该过程通常很快,因为读者的工作速度很快。例如,如果您想要的列是 type 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);    
       }
    }
于 2013-09-13T01:45:49.810 回答
1
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;
                                }
                            }
                            }
于 2015-08-14T06:55:28.953 回答