我有这个字符串:
1#3.doc#0.036/n
2#1.doc#0.026/n
我想将它拆分为#
并将每一行放在DataTable中的一行中
像这样:
1 3.doc 0.036
2 1.doc 0.026
我有一个像这样的DataTable:
DataTable table = new DataTable();
table.Columns.Add("Id", typeof(int));
table.Columns.Add("FileName", typeof(string));
table.Columns.Add("Content", typeof(string));
我该怎么做?
答案 0 :(得分:5)
以下是将字符串拆分为多行,然后将这些行拆分为不同的部分。
您的字符串首先被换行符\n
拆分为一行string[]
行。
然后,这些行逐个被Split('#')
分成几部分。
最后,这些部分会添加到您创建的列中。
请记住保存您创建的列,不要忘记将新创建的行添加到表中。
DataTable table = new DataTable();
DataColumn colID = table.Columns.Add("Id", typeof(int));
DataColumn colFileName = table.Columns.Add("FileName", typeof(string));
DataColumn colContent = table.Columns.Add("Content", typeof(string));
string source = "1#3.doc#0.036\n2#1.doc#0.026\n";
string[] lines = source.Split('\n');
foreach(var line in lines)
{
string[] split = line.Split('#');
DataRow row = table.NewRow();
row.SetField(colID, int.Parse(split[0]));
row.SetField(colFileName, split[1]);
row.SetField(colContent, split[2]);
table.Rows.Add(row);
}
也可以使用row["FileName"] = data
将数据添加到行中,但如果更改列的名称,则会中断,而编译器和IDE会检查对列的对象的引用。另外this article解释了如何创建类型化DataTable ,这是您可能想要做的事情。
答案 1 :(得分:1)
ERM,
var stuff = someString.Split('\n')
.Select(r => r.Split('#')
.Select(a => new
{
Id = int.Parse(a[0]),
FileName = a[1],
Content = a[2]
})
.ToList();
这将为您提供匿名类型的IList
。不值得将它放在DataTable
。