![](/img/trans.png)
[英]How do I copy a DataColumn from DataTable1 into DataTable2?
[英]How to read string value from DataTable1.Row[i][j] into an array or multiple rows of DataTable2
我正在將csv文件讀取到dataTable1
。 一列中的每一行都有多個值。 我想將這些多個值存儲在數組中。
我的csv文件是這樣的
my dataTable1 has ID and Admin values.
dataTable1.Rows[i][1] =
[{"@odata.type":"#Microsoft.Azure","Claims","DisplayName1","Department"}]
我想遍歷dataTable1中的每一行,並使用","
定界符拆分此字符串並寫入dataTable2。 就像是
dataTable2.Rows[i][1] = "....Microsft..."
dataTable2.Rows[i][2] = "Claims"
dataTable2.Rows[i][3] = "DisplayName1"
。 。
我不能真正理解您發布的示例代碼,因為c#數組不能那樣工作,但是您要么想將csv列散布到多個datatable列中:
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列中:
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]
}
);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.