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

如何将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、调整的代币、

要做的事

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

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

如何将每个文件的数据读入列表,并使用简单的机制将数据的每个“列”映射到我在类中定义的关联类属性(即列名)

文件结构1:

使用日期、产品名称、用户Id、使用的令牌

  • 20160428,三星,dorman@stackoverflow.com
  • 文件结构2:

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

  • 脱离网络,10月15日,10月31日-1573820274918-230934049372045,Xbox,基础设施360的网桥设计
  • 文件结构3:

    使用日期、产品名称、产品版本、用户Id、计算机名称、服务器名称、使用的令牌、使用的小时数

  • 20161027,Gamepro,2016,11597,BC31810,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; }
    
            }
    
    应用程序:

    名称空间控制台
    {
    类令牌
    {
    公共列表标记{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);
        }
    }