如何用“#”拆分字符串并将结果存储在DataTable中

时间:2014-07-04 07:55:21

标签: c# asp.net split

我有这个字符串:

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));

我该怎么做?

2 个答案:

答案 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