C# Csvhelper-读取/获取所有行的单个列?
嗨,我正在使用csvHelper读取具有可变列数的csv文件。第一行始终包含标题行。列的数量一开始是未知的,有时有三列,有时有30+。行数可以很大。 我可以读取csv文件,但如何处理每列数据。我需要对数据进行一些基本统计(例如,min、max、stddev),然后以非csv格式写出它们。 这是我到目前为止的代码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
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;
}
}
}