【问题标题】:CSV to C# FileHelpersCSV 到 C# 文件助手
【发布时间】:2016-04-07 15:23:44
【问题描述】:

我想使用FileHelpers 将一个非常基本的CSV 文件读入C#。

我有一个看起来像这样的Model

[DelimitedRecord(",")]
[IgnoreFirst()]
public class NavigationButton
{
    public int ID;
    public string Text;
    public string Path;
}

CSV 文件如下所示;

我希望能够读取相应的行并为从CSV 文件中读取的每条记录创建一个新的NavigationButton。我已将它们读入DataTable using;

public DataTable GetNavigationButtonNames()
{
    var filename = @"C:\Desktop\NavigationButtons.csv";
    var engine = new FileHelperEngine(typeof(NavigationButton));
    return engine.ReadFileAsDT(filename);
}

但我现在无法循环通过 DataTable,因为它没有实现 IEnumerable。我会在foreach 循环中创建一个新的NavigationButton 并添加到适当的行中,但是这不能按照我开始的方式完成。

如何更改此方法,以便循环访问从CSV 文件中读取的对象并为CSV 文件中的每一行创建一个新按钮?

【问题讨论】:

  • 循环遍历表的行:DataTable.Rows....
  • @Ric 然后我怎样才能遍历按钮并适当地命名它们?即Button1.Text = row[0][1].ToString()

标签: c# csv datatable filehelpers


【解决方案1】:

改用FileHelperEngine<T>的通用版本,然后你可以这样做:

var filename = @"C:\Desktop\NavigationButtons.csv";
var engine = new FileHelperEngine<NavigationButton>();
// ReadFile returns an array of NavigationButton
var records = engine.ReadFile(filename);
// then you can do your foreach or just get the button names with LINQ
return records.Select(x => x.Text);

ReadFile() is here 的文档。

如果您愿意,也可以使用ReadFileAsList()

【讨论】:

    【解决方案2】:

    这个怎么样:

    List<NavigationButton> buttons = new List<NavigationButton>();
    DataTable dt = GetNavigationButtonNames();
    
    foreach (DataRow dr in dt.Rows)
    {
        buttons.Add(new NavigationButton 
        { 
            ID = int.Parse(dr["id"]), 
            Text = dr["Text"].ToString(), 
            Path = dr["Path"].ToString() });
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      相关资源
      最近更新 更多