如何将CSV中的列映射到C#中的类属性?
要做的事 创建控制台应用程序,该应用程序可以读取CSV文件并自动确定它属于三个CSV文件中的哪一个(列数据不同) 我已经创建了一个控制台应用程序,它当前正在使用SmartXLS库从目录中读取所有csv文件 如何将每个文件的数据读入列表,并使用简单的机制将数据的每个“列”映射到我在类中定义的关联类属性(即列名) 文件结构1: 使用日期、产品名称、用户Id、使用的令牌如何将CSV中的列映射到C#中的类属性?,c#,asp.net,.net,asp.net-mvc,C#,Asp.net,.net,Asp.net Mvc,要做的事 创建控制台应用程序,该应用程序可以读取CSV文件并自动确定它属于三个CSV文件中的哪一个(列数据不同) 我已经创建了一个控制台应用程序,它当前正在使用SmartXLS库从目录中读取所有csv文件 如何将每个文件的数据读入列表,并使用简单的机制将数据的每个“列”映射到我在类中定义的关联类属性(即列名) 文件结构1: 使用日期、产品名称、用户Id、使用的令牌 20160428,三星,dorman@stackoverflow.com 文件结构2: 原因、月份、调整日期、交易ID、调整的代币、
public class Token
{
public DateTime Usagedate { get; set; }
public string Product_name { get; set; }
public string Product_Version { get; set; }
public string Userid { get; set; }
public string User_name { get; set; }
public string Machine_name { get; set; }
public string Server_name { get; set; }
public string Tokens_used { get; set; }
public string Use_count { get; set; }
}
应用程序:
名称空间控制台
{
类令牌
{
公共列表标记{get;set;}
公共无效令牌数据()
{
控制台。WriteLine(“开始收割”);
CategorizeData();//函数
}
public void CategorizeData()
{
整数计数=0;
令牌=新列表();
var files=Directory.EnumerateFiles(@“C:\Users\Projects”,“*.csv”);
foreach(文件中的字符串文件)
{
SmartXLS.WorkBook WB=新工作簿();
WB.readCSV(文件);
DataTable dt=WB.ExportDataTable();
字符串dtSTR;
数据行dr;
数据列dc;
对于(int i=1;i
我以前编写过一个CSV类映射器,但我发现有一个名为的组件速度非常快,实际上比我的更好。它有很多特点
string content = "";
var files = Directory.EnumerateFiles(@"C:\Users\Projects", "*.csv");
foreach (string file in files)
content += System.IO.File.ReadAllText(file) + Environment.NewLine;
using(TextReader sr = new StringReader(content))
{
var csv = new CsvReader(sr);
csv.Configuration.RegisterClassMap<TokenMap>();
var records = csv.GetRecords<Token>();
}
public class TokenMap : CsvClassMap<Token>
{
public TokenMap()
{
Map(m => m.Product_name );
Map(m => m.Product_Version);
Map(m => m.Userid);
Map(m => m.User_name);
Map(m => m.Machine_name);
Map(m => m.Server_name);
Map(m => m.Tokens_used);
Map(m => m.Use_count);
}
}
字符串内容=”;
var files=Directory.EnumerateFiles(@“C:\Users\Projects”,“*.csv”);
foreach(文件中的字符串文件)
content+=System.IO.File.ReadAllText(文件)+Environment.NewLine;
使用(TextReader sr=新的StringReader(内容))
{
var csv=新的CsvReader(sr);
csv.Configuration.RegisterClassMap();
var records=csv.GetRecords();
}
公共类标记映射:CsvClassMap
{
公共令牌映射()
{
映射(m=>m.Product\u name);
Map(m=>m.Product\u版本);
Map(m=>m.Userid);
Map(m=>m.User\u name);
映射(m=>m.Machine\u name);
映射(m=>m.Server\u name);
Map(m=>m.Tokens\u使用);
Map(m=>m.Use\u计数);
}
}
为什么要捕捉所有异常?@luxun。不需要吗?除非您打算采取措施处理例外情况,否则不需要。谢谢您的回复。在我上面发布的函数中,我从一个目录中读取所有csv文件。在你的代码中,你从一个文件读取数据?在这种情况下,你能建议我如何从我的目录中读取所有文件吗?我更改了代码,因此适合从目录中读取csv文件。CSVHelper很棒+1@AshkanMobayenKhiabani. 我面临着几个错误。我必须创建一个名为tokenmap的新类吗?或者你的代码的哪一部分进入了CategorizeData()函数?这是我给它起的名字,你应该有一个映射类,可以用任何你喜欢的名字
string content = "";
var files = Directory.EnumerateFiles(@"C:\Users\Projects", "*.csv");
foreach (string file in files)
content += System.IO.File.ReadAllText(file) + Environment.NewLine;
using(TextReader sr = new StringReader(content))
{
var csv = new CsvReader(sr);
csv.Configuration.RegisterClassMap<TokenMap>();
var records = csv.GetRecords<Token>();
}
public class TokenMap : CsvClassMap<Token>
{
public TokenMap()
{
Map(m => m.Product_name );
Map(m => m.Product_Version);
Map(m => m.Userid);
Map(m => m.User_name);
Map(m => m.Machine_name);
Map(m => m.Server_name);
Map(m => m.Tokens_used);
Map(m => m.Use_count);
}
}