C# Csvhelper-读取/获取所有行的单个列?

C# Csvhelper-读取/获取所有行的单个列?,c#,csv,csvhelper,C#,Csv,Csvhelper,嗨,我正在使用csvHelper读取具有可变列数的csv文件。第一行始终包含标题行。列的数量一开始是未知的,有时有三列,有时有30+。行数可以很大。 我可以读取csv文件,但如何处理每列数据。我需要对数据进行一些基本统计(例如,min、max、stddev),然后以非csv格式写出它们。 这是我到目前为止的代码 try{ using (var fileReader = File.OpenText(inFile)) using (var csvResult = new CsvHe

嗨,我正在使用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);
    }
试试看{
使用(var fileReader=File.OpenText(infle))
使用(var csvResult=new CsvHelper.CsvReader(文件阅读器))
{
//阅读标题行
csvResult.Read();
//阅读整个文件
动态记录=csvResult.GetRecords().ToList();
/*现在我如何得到一个完整的专栏???
*记录栏???
*记录getColumn['hadername']???
*/
}
捕获(例外情况除外)
{
MessageBox.Show(“错误:无法从磁盘读取文件。原始错误:”+ex.Message);
}

谢谢

我不认为库能够直接这样做。您必须从各个字段中读取列并将它们添加到
列表中,但过程通常很快,因为读者的工作速度很快。例如,如果所需列的类型为
字符串
,则代码如下:

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);    
       }
    }
List myStringColumn=new List();
使用(var fileReader=File.OpenText(infle))
使用(var csvResult=new CsvHelper.CsvReader(文件阅读器))
{
while(csvResult.Read())
{
字符串stringField=csvResult.GetField(“标题名”);
myStringColumn.Add(stringField);
}
}
使用(System.IO.StreamReader file=new System.IO.StreamReader(Server.MapPath(filepath)))
{
//Csv阅读器读取流
CsvReader csvread=新CsvReader(文件);
while(csvread.Read())
{
int count=csvread.FieldHeaders.count();
如果(计数=55)
{
DataRow dr=myExcelTable.NewRow();
if(csvread.GetField(“FirstName”)!=null)
{
dr[“FirstName”]=csvread.GetField(“FirstName”);
}
其他的
{
dr[“FirstName”]=“”;
}
if(csvread.GetField(“LastName”)!=null)
{
dr[“LastName”]=csvread.GetField(“LastName”);
}
其他的
{
dr[“LastName”]=“”;
}
}
其他的
{
lblMessage.Visible=true;
lblMessage.Text=“列未采用指定格式。”;
lblMessage.ForeColor=System.Drawing.Color.Red;
返回;
}
}
}

您的代码只保存整个列中的第一个值。如果该列包含500个值怎么办?
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;
                                }
                            }
                            }