CSV文件读取结果值设置为实体对象

时间:2014-05-27 08:44:18

标签: c# csv

我尝试使用以下网址将OFAC制裁列表更新到我的数据库。

网址:

http://www.treasury.gov/ofac/downloads/sdn.csv

此csv文件没有任何标头,可以作为文件下载。因此,我将所有记录拆分并作为字符串数组获取。我有一个问题,如何将这些结果分配给我的实体对象进行保存。

这是我的代码:

List<SanctionOFACEntries> sanctionOFACList = new List<SanctionOFACEntries>();
List<string> splitted = new List<string>();
string fileList = GetCSVFileContent(url);
string[] tempStr;
tempStr = Regex.Matches(fileList, "(?:\"(?<m>[^\"]*)\")|(?<m>[^,]+)").Cast<Match>().Select(m => m.Value).ToArray(); ;

int i = 0;

foreach (string item in tempStr)
{
    i += 1;

    SanctionOFACEntries sanctionOFAC = new SanctionOFACEntries();

    if (i != 1)
    {
        sanctionOFAC.Name = tempStr[i];
    }
}

这种情况是所有记录都正确分配给数组列表。如果任何人有这个OFAC样本上传代码发送给我。

请帮忙。

感谢。

1 个答案:

答案 0 :(得分:0)

我不是100%明确你的问题,但首先,我建议你使用csv库。我不清楚你的正则表达式试图到期了什么,但我假设它试图解析CSV。使用FileHelpers csv库,我已经重写了您的代码:

var engine = new FileHelperEngine<SanctionOFACEntries>(); 
var sanctionOFACList = engine.ReadStringAsList(GetCSVFileContent(url));

更直接。请注意,您的SanctionOFACEntries课程应该类似于Treasury Data Spec

[DelimitedRecord(",")]
public class SanctionOFACEntries
{
    public int ent_num
    [FieldQuoted]
    public string ent_num { get; set; }
    [FieldQuoted]
    public string SDN_Name { get; set; }
    [FieldQuoted]
    public string SDN_Type { get; set; }
    [FieldQuoted]
    public string Program { get; set; }
    [FieldQuoted]
    public string Title { get; set; }
    [FieldQuoted]
    public string Call_Sign { get; set; }
    [FieldQuoted]
    public string Vess_type { get; set; }
    [FieldQuoted]
    public string Tonnage { get; set; }
    [FieldQuoted]
    public string GRT { get; set; }
    [FieldQuoted]
    public string Vess_flag { get; set; }
    [FieldQuoted]
    public string Vess_owner { get; set; }
    [FieldQuoted]
    public string Remarks { get; set; }
}