gpt4 book ai didi

c# - 如何将列从 CSV 映射到 C# 中的类属性?

转载 作者:行者123 更新时间:2023-11-30 20:29:35 24 4
gpt4 key购买 nike

待办事项

创建一个控制台应用程序,它可以读取 CSV 文件并自动确定它属于三个 CSV 文件(列数据不同)中的哪一个。

我已经创建了一个控制台应用程序,它当前正在使用 SmartXLS 库从目录中读取所有 csv 文件。

我怎样才能将每个文件的数据读入列表,并有一个简单的机制来映射每个数据“列”与我在我的类中定义的相关类属性(即列名)?

文件结构一:

使用日期、产品名称、用户ID、使用的代币

  1. 20160428,三星,dorman@stackoverflow.com

文件结构2:

原因、月份、调整日期、交易ID、调整的代币、产品名称、添加评论

  1. 离线,10 月 15 日,15 月 31 日,73820274918-230934049372,045,Xbox,InfraWorks 360 Bridge Design。

文件结构3:

使用日期、产品名称、产品版本、用户 ID、机器名称、服务器名称、使用的 token 、使用的小时数

  1. 20161027, Gamepro, 2016, 11597, BC318010, LA847012, 6, 0.1

请帮助我重写函数。

类:

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; }

}

应用:

namespace ConsoleApp
{
class token
{
public List<Token> Tokens { get; set; }
public void TokenData()
{
Console.WriteLine("Begin Harvesting");

CategorizeData();//function
}

public void CategorizeData()
{
int count = 0;

Tokens = new List<Token>();

var files = Directory.EnumerateFiles(@"C:\Users\Projects", "*.csv");

foreach (string file in files)
{

SmartXLS.WorkBook WB = new WorkBook();
WB.readCSV(file);

DataTable dt = WB.ExportDataTable();

string dtSTR;
DataRow dr;
DataColumn dc;
for (int i = 1; i < dt.Rows.Count; i++)
{

dr = dt.Rows[i];

try
{
// Map Columns with the class properties
// read them to the list
dtSTR = dr[0].ToString();
if (string.IsNullOrEmpty(dtSTR)) continue;

var tkn = new Token();


tkn.Usagedate = ParseDateTime(dtSTR);
tkn.Product_name = dr[1].ToString();
tkn.Userid = dr[2].ToString();
tkn.Tokens_used = dr[3].ToString();
tkn.Reason = dr[4].ToString();


Tokens.Add(tkn);
count++;


}
catch (Exception ex)
{ }


}

}
}
}

}

最佳答案

我之前已经为类编写了一个 CSV 映射器,但是有一个名为 CSVHelper 的组件我发现它非常快,而且实际上比我的效果更好。而且它有很多功能

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);
}
}

关于c# - 如何将列从 CSV 映射到 C# 中的类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45981943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com