我尝试使用以下网址将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样本上传代码发送给我。
请帮忙。
感谢。
答案 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; }
}