我无法真正理解您发布的示例代码,因为 c# 数组不能这样工作,但您要么想将 csv 列分散到多个数据表列中:
DataTable dt = new DataTable();
dt.Columns.Add("something");
dt.Columns.Add("name");
dt.Columns.Add("displayname");
dt.Columns.Add("location");
dt.Columns.Add("ID");
string csv = @"someth1,{jon}{jonno}{newyork}{1}
Someth2,{jane}{janey}{paris}{2}";
foreach(string line in csv.Split()){
string bits = line.Split(',');
List<string> itm = new List<string>();
itm.Add(bits[0]);
itm.AddRange(bits[1].Split("{}".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
dt.Rows.Add(itm.ToArray());
}
或者您想将其作为数组存储在单个数据表列中:
DataTable dt = new DataTable();
dt.Columns.Add("something");
dt.Columns.Add("info", typeof(string[]));
string csv = @"someth1,{jon}{jonno}{newyork}{1}
someth2,{jane}{janey}{paris}{2}";
foreach(string line in csv.Split()){
string bits = line.Split(',');
string info = bits[1].Split("{}".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
dt.Rows.Add(new object[] { bits[0], info });
}
这不是模型 CSV 解析的练习/示例。我假设您已经有一个很好的库来执行此操作,因此 bits 数组表示该库的输出
这里的关键是如何处理你的花括号分隔列表;有很多选择,犀牛绝不是唯一的。它相对简单,但是您还没有发布大量示例来了解您正在处理的种类。如果可以转义例如大括号,它可能需要一些升级。告诉 CSV 解析器 ,{} 是所有用于分隔字段的标记时,您可能也会很高兴
编辑,以回应您的问题修订:
DataTable dt1 = new DataTable();
dt1.Columns.Add("ID");
dt1.Columns.Add("CSV");
dt1.Rows.Add(new object[] { "1", "[{\"@odata.type\":\"#Microsoft.Azure\",\"Claims\",\"DisplayName1\",\"Department\"}]" } );
DataTable dt2 = new DataTable();
dt2.Columns.Add("ID");
dt2.Columns.Add("Provider");
dt2.Columns.Add("Department");
dt2.Columns.Add("Displayname");
dt2.Columns.Add("OtherDept");
foreach(DataRow ro in dt1.Rows){
string csv = ro[1].ToString();
csv = csv.Trim('[',']','{','}','"'); //remove leading and trailing chars that mess up our splitting
string bits = csv.Split(new []{"},{"}); //split on a string delimiter of "},{". note: new[]{"abc","def"} is c# shorthand to declare an array of strings containing [0]="abc" and [1]="def"
// our dt2 has 5 columns
dt2.Rows.Add(new object[] {
ro["ID"],
bits[1],
bits[2],
bits[3],
bits[4]
}
);
}