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

C# 使用拆分并存储在数据表中,c#,asp.net,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

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

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

我有这样一个数据表:

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

我希望能够在逗号处拆分字符串,然后将每个值存储在数据表中,使它们显示在同一行上(在/n处拆分)。有没有一种简单的方法可以使用拆分实现这一点?或者我最好换一种方式来做

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

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

这仍然是以线性时间执行的,因此它肯定是一种方式。

是的,您可以先按逗号分割,然后按/n分割:

foreach(var row in myString.Split(','))
{
    var fields = row.Split(new string[] { "/n" },
        StringSplitOptions.None);
    // fields[0] is ID, fields[1] is count
}
这仍然是以线性时间执行的,因此它肯定是一种方法。

如果每个记录始终存在“/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]));
}
string Input=“12/nTwelve,13/nThirteen,”;
字符串[]InputSplit=Regex.Split(输入@“(?:/n|\,)”;
对于(inti=0;i<((InputSplit.Length/2)*2);i+=2){
//Maple在中间有助于在数据集中有尾逗号。
Console.WriteLine(string.Format(“{0}\t{1}”,InputSplit[i],InputSplit[i+1]);
}
如果每条记录始终存在“/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]));
}
string Input=“12/nTwelve,13/nThirteen,”;
字符串[]InputSplit=Regex.Split(输入@“(?:/n|\,)”;
对于(inti=0;i<((InputSplit.Length/2)*2);i+=2){
//Maple在中间有助于在数据集中有尾逗号。
Console.WriteLine(string.Format(“{0}\t{1}”,InputSplit[i],InputSplit[i+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;
        }

注意,对于这个示例,我更改了第一列的类型,如在提供的示例字符串中,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;
        }

这可能比我的解决方案优雅得多。但是,当无法保证数据始终具有两个分隔符时,您的解决方案才是正确的,所以您没有错!工作起来很有魅力,是的,输入总是相同的格式。这可能比我的解决方案优雅得多。当数据不能保证总是有两个分隔符时,您的解决方案是正确的,所以您没有错!工作起来很有魅力,是的,输入总是相同的格式