在我的资源中,我有一个如下所示的字符串:One,Two;Three,Four;Five,Six
等。
我需要将该字符串转换为DataTable
,如下所示:
| Col 1 | Col 2 |
| One | Two |
| Three | Four |
| Five | Six |
是否有优雅(不必编写多行代码)的方法将该字符串转换为DataTable
而不必使用2个拆分和for循环来完成它?
修改
我发现了以下代码:Array.ForEach(input, c => dataTable.Rows.Add()[0] = c);
但是从我看到的内容中,只有在您希望DataTable只有一列时才能使用它。
答案 0 :(得分:1)
你几乎把它命名;你需要做的是分割琴弦,并将它们插入情侣。如果你有1个额外的字符串(子字符串的数量不是奇数),请将数据库末尾的最后一个字符串插入其自己的行中。
string yourString = "insert your string"
string[] Splits = yourString.split(",");// Dividing your string by "," chars.
int i=0;// declaring it here for using it later to check if the number is odd
for(int i=0; i < Splits.Length-1; i+=2)
{
InsertIntoDatabase(Splits[i,i+1]); //Inserting two strings into the database
}
//if i is odd, i will be equal exacly to the Length here. Otherwise...
if(i<Splits.Length)
{
InsertIntoDatabase(Splits[i]); // Insert the last string in it's own row.
}
InsertIntoDatabase必须插入2个字符串(我不能自己实现它,因为我真的不知道你正在使用什么数据库和设置)并且向下一行。用一个收到单个字符串的函数重载它,你就有了一个很好的方法。 :)
编辑:优雅..只是从评论中看到。我不确定你的意思是什么,但我想你可以覆盖string.Split并在每次分割时将字符串发送到DB - 可能会使它更“优雅”,但这取决于你的定义。祝你好运答案 1 :(得分:0)
DataTable tbl = new DataTable();
tbl.Columns.Add("Col1");
tbl.Columns.Add("Col2");
string numbers ="One,Two;Three,Four;Five,Six";
string[] array = numbers.Split(';');
foreach(string s in array)
{
DataRow row = tbl.NewRow();
string[] numb = s.Split(',');
row["Col1"] = numb[0];
row["Col2"] = numb[1];
tbl.Rows.Add(row);
}
以下是您需要的代码。下次先从你身边做一些事情并展示你的努力。
答案 2 :(得分:0)
您需要多次拆分和循环。
您可以使用DataTable.LoadDataRow
方法,例如:
string str = "One,Two;Three,Four;Five,Six";
DataTable dt = new DataTable();
dt.Columns.Add("Col1", typeof(string));
dt.Columns.Add("Col2", typeof(string));
str.Split(';').ForEach(r => dt.LoadDataRow(
r.Split(',').Select(t => (object)t).ToArray()
, LoadOption.OverwriteChanges));
这会根据需要使用字符串值填充DataTable
。
现在,如果这足够优雅,那取决于!
答案 3 :(得分:0)
如果您不想使用for循环将其拆分两次,那么一种方法是将字符串提取到2D array
然后:
DataTable table = new DataTable();
table.Columns.Add("col1", typeof(string));
table.Columns.Add("col2", typeof(string));
String val="One,Two;Three,Four;Five,Six";
string[][] values=val.Split(';').Select(x => x.Split(',')).ToArray();
for (int i= 0; i< values.Length; i++)
{
DataRow newRow = table.NewRow();
for (int j= 0; j< 2; j++)
{
newRow[i] = values[i,j];
}
table.Rows.Add(newRow);
}