2011-11-30 62 views
0

存储我在看如何分割字符串,并存储在数据表中的信息。我可以得到拆分和存储以正确工作,但问题出在我如何使用拆分。这是字符串的一个例子,我有:使用分割,并在数据表

itemid/n3,itemid/n4 

的itemid是项目唯一ID和后/ n是多少用户选择的项目,逗号方式隔开的条目

我有一个像这样的数据表:

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

Id喜欢能够字符串在逗号分割,然后每个值存储在数据表中,这样他们出现在同一行(在/ n个分割)被有一个简单的方法来做到这一点使用拆分?还是我更好做另一种方式

回答

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])); 
} 
+1

这可能比我的解决方案更优雅。 –

+0

你的是,当数据不能保证始终有两个分隔符的,所以你没看错了正确的! – Dracorat

+0

工作就像一个魅力和肯定的投入始终是相同的格式 – Gordnfreeman

3

是的,你可以用逗号分开第一和/ N算账:

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

这仍然执行线性时间,因此可以肯定是一个办法走。

+0

这也可以,谢谢您的输入! – Gordnfreeman

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