2012-08-12 46 views
3

我哈瓦发送在这样的字符串中的信息来我的应用程序(C#)我的服务器上的PHP文件:拆分数组仅每第三次,当分裂焦炭出现

文字|名称|日期|文本|名称|日期|文本|名称|日期| ......现在我想分割它,以便我可以用文本,名称和日期填充ListViewerItem,这三个的下一个组合(文本,名称,日期)应该在新的ListViewerItem中。 如何在“|”中每三次分割一次字符串?

+0

为什么不使用JSON([PHP](http://php.net/manual/en/book.json.php)[C#](HTTP ://james.newtonking.com/projects/json-net.aspx)) - 将使你的生活更轻松.. – Shai 2012-08-12 07:53:22

回答

3

刚上管道符号和循环分裂与取3:

public void Foo(string content) 
{ 
    var entries = content.Split('|'); 

    for(int i = 0; i < entries.Length; i += 3) 
    { 
     var text = entries[0 + i]; 
     var name = entries[1 + i]; 
     var date = entries[2 + i]; 

     // TODO: add values to listview. 
    } 
} 
1

分割字符串,然后组字符串:

string[] values = data.Split('|'); 
List<string[]> lines = 
    Enumerable.Range(0, values.Length/3) 
    .Select(
    i => new string[] { values[i * 3], values[i * 3 + 1], values[i * 3 + 2] } 
) 
    .ToList(); 
1

我假设文字,名称,日期实际上是值,所以唯一常见的分隔符是|。我认为最好的方法是将字符串拆分为|然后循环结果数组。保留一个计数器,每隔三个项目创建一个包含属性Text,Name和Date的对象。然后将该对象添加到列表中,然后将该列表绑定到ListViewer。

0
var values = "a|b|c|a|b|c|a|b|c|a|b|c|a|b|c|a|b|c|a|b|c|a|b|c".Split('|'); 
var result = Enumerable.Range(0, values.Length).GroupBy(i => Convert.ToInt32(Math.Floor((i/3d)))).Select(group => String.Join("|", group.Select(i => values[i]))); 
0

使用RegexLINQ

var result = from Match match 
       in Regex.Matches(inputString, @"((?<t>\w+)\|(?<n>\w+)\|(?<d>\w+))+") 
       select 
        new 
         { 
          Text = match.Groups["t"].Value, 
          Name = match.Groups["n"].Value, 
          Date = match.Groups["d"].Value 
         };