大家好我得到一个字符串,如下所示,要在变量中插入数据。
我编写了一个代码,将其框架为DataTable
,如下所示:
protected void Page_Load(object sender, EventArgs e)
{
var vData = "ID=1;Name='XYZ';ID=2;Name='PQR'";
var values = vData.Replace(";", ",");
var cols = values.Split(',');
DataTable dt = new DataTable();
for (int i = 0; i < cols.Length; i++)
{
var p = cols[i].Split('=');
if (!dt.Columns.Contains(p[0].ToString()))
dt.Columns.Add(p[0].ToString());
}
DataRow dr = dt.NewRow();
for (int j = 0; j < dt.Columns.Count; j++)
{
var value = cols[j].Split('=');
dr[j] = value[1];
}
dt.Rows.Add(dt);
}
但是这只添加了一行,因为该列始终为2
,但如果数据超出
答案 0 :(得分:3)
您可以尝试下面的内容,它会添加多行。
我做的是,我使用正则表达式对ID进行计数,并为循环下面的循环添加额外的循环。
var v = "ID=1;Name='XYZ';ID=2;Name='PQR';";
string newRow = "ID";
var values = v.Replace(";", ",");
values = values.Remove(values.Length - 1, 1);
var cols = values.Split(',');
string pattern = Regex.Escape(cols[0].Split('=')[0]);
var matches = Regex.Matches(v, "\\b" + pattern + "\\b", RegexOptions.IgnoreCase);
int count = matches.Count;
DataTable dt = new DataTable();
for (int i = 0; i < cols.Length; i++)
{
var p = cols[i].Split('=');
if (!dt.Columns.Contains(p[0].ToString()))
dt.Columns.Add(p[0].ToString());
}
DataRow dr = null;
int idxCol = 0;
for (int k = 0; k < count; k++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
var value = cols[idxCol].Split('=');
if (value[0] == newRow)
{
dr = dt.NewRow();
dr[j] = value[1];
}
else
{
dr[j] = value[1];
}
idxCol++;
}
dt.Rows.Add(dr);
}
您仍然可以重新考虑它并输入正确的值。这对你来说只是一个想法。