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