簡體   English   中英

如何從DataTable1.Row [i] [j]讀取字符串值到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM