使用拆分并存储在数据表中

时间:2011-11-30 19:07:05

标签: c# asp.net

我正在研究如何拆分字符串并将信息存储在数据表中。我可以让拆分和存储正常工作,但问题在于我如何尝试使用拆分。这是我的字符串示例:

 itemid/n3,itemid/n4

itemid是项目唯一ID,在/ n之后是用户选择的项目数量,逗号分隔条目

我有一个这样的数据表:

DataTable table = new DataTable();
table.Columns.Add("id", typeof(int));
table.Columns.Add("count", typeof(int));

我希望能够在逗号中拆分字符串,然后将每个值存储在数据表中,使它们出现在同一行(在/ n处拆分)是否有一种简单的方法可以使用拆分执行此操作?或者我最好以另一种方式做到这一点

3 个答案:

答案 0 :(得分:3)

是的,你可以先用逗号分隔,然后按/分开:

foreach(var row in myString.Split(','))
{
    var fields = row.Split(new string[] { "/n" },
        StringSplitOptions.None);
    // fields[0] is ID, fields[1] is count
}

这仍然在线性时间内执行,因此它绝对可能是一种方法。

答案 1 :(得分:2)

如果每个记录始终存在“/ n”和“,”,则可以使用带有表达式“(?:/ n | \,)”的正则表达式拆分,然后使用x + = 2而不是x ++循环通过清单。 X将是ID,X + 1将是值。

string Input = "12/nTwelve,13/nThirteen,";
string[] InputSplit = Regex.Split(Input, @"(?:/n|\,)");
for(int i = 0 ; i < ((InputSplit.Length / 2) * 2) ; i+=2){ 
    //Math in the middle helps when there's a trailing comma in the data set
    Console.WriteLine(string.Format("{0}\t{1}", InputSplit[i], InputSplit[i+1]));
}

答案 2 :(得分:1)

请注意,对于该示例,我更改了第一列的类型,如在提供的示例字符串中,id是一个字符串。

        DataTable table = new DataTable();
        table.Columns.Add("id", typeof(string));
        table.Columns.Add("count", typeof(int));

        var str = "itemid/n3,itemid/n4";
        var items =
            str.Split(',').Select(
                r =>
                new
                    {
                        Id = r.Split(new[] {"/n"}, StringSplitOptions.RemoveEmptyEntries).First(),
                        Count = int.Parse(r.Split(new[] {"/n"}, StringSplitOptions.RemoveEmptyEntries).Last())
                    });

        foreach (var item in items)
        {
            var row = table.NewRow();
            row["id"] = item.Id;
            row["count"] = item.Count;
        }