3 Stimmen

Ein Array nur jedes dritte Mal teilen, wenn das Trennzeichen erscheint

Ich hava eine PHP-Datei auf meinem Server, die die Informationen in einer Zeichenfolge wie diese zu meinem app (c#) sendet:

Text|Name|Datum|Text|Name|Datum|Text|Name|Datum|......nun möchte ich es so aufteilen, dass ich ein ListViewerItem mit Text, Name und Datum füllen kann, die nächste Kombination dieser drei (Text, Name, Datum) soll in ein neues ListViewerItem gehen. Wie kann ich den String nur jedes dritte Mal bei "|" aufteilen?

3voto

pjvds Punkte 963

Teilen Sie einfach auf dem Rohrsymbol und Schleife mit einem Take von 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.
    }
}

1voto

Guffa Punkte 663241

Zerlegen Sie die Zeichenfolge und gruppieren Sie dann die Zeichenfolgen:

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

1voto

Raj Punkte 1726

Ich nehme an, dass Text, Name, Datum tatsächlich Werte sind, so dass das einzige gemeinsame Trennzeichen das | ist. Ich denke, der beste Weg wäre, die Zeichenfolge auf | zu teilen und dann Schleife das resultierende Array. Behalten Sie einen Zähler und erstellen Sie bei jedem dritten Element ein Objekt mit den Eigenschaften Text, Name und Datum. Dieses Objekt wird dann zu einer Liste hinzugefügt, die dann an den ListViewer gebunden ist.

0voto

geekbytes0xff Punkte 203
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])));

0voto

Ria Punkte 9806

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X