Frage

Ich habe einen JS-Array bekommt, die auf dem Server in eine Textdatei schreiben mit Streamwriter. Das ist die Linie, die es tut:

sw.WriteLine(Request.Form["seatsArray"]);

Im Moment einer Zeile wird mit dem gesamten Inhalt des Arrays darauf geschrieben werden. Ich möchte eine neue Zeile nach jeweils 5 Komma geschrieben werden. Beispiel-Array:

BN,ST,A1,303,601,BN,ST,A2,303,621,BN,WC,A3,303,641,

Should Ausgabe:

BN,ST,A1,303,601,
BN,ST,A2,303,621,
BN,WC,A3,303,641,

Ich weiß, ich könnte einen String ersetzen verwenden, aber ich weiß nur, wie diese Ausgabe nach jedem Komma eine neue Zeile zu machen, und nicht nach einer bestimmten Menge an Kommata.

Wie kann ich das bekommen passieren?

Danke!

War es hilfreich?

Lösung

Nun, hier ist die einfachste beantworte ich mir vorstellen kann:

string[] bits = Request.Form["seatsArray"].Split(',');

for (int i = 0; i < bits.Length; i++)
{
    sw.Write(bits[i]);
    sw.Write(",");
    if (i % 5 == 4)
    {
        sw.WriteLine();
    }
}

Es ist nicht sehr elegant, aber es wird den Job zu erledigen, glaube ich.

Sie können dies die aktuelle Zeile aus danach bis Ende wollen, falls erforderlich:

if (bits[i].Length % 5 != 0)
{
    sw.WriteLine();
}

Ich bin sicher, es gibt klügere Wege ... aber das ist einfach.

Eine Frage: sind die Werte immer drei Zeichen lang? Denn wenn dem so ist, sind Sie im Grunde nur brechen die Zeichenfolge bis alle 20 Zeichen ...

Andere Tipps

So etwas wie:

var input = "BN,ST,A1,303,601,BN,ST,A2,303,621,BN,WC,A3,303,641,";
var splitted = input.Split(',');

var cols = 5;
var rows = splitted.Length / cols;

var arr = new string[rows, cols];

for (int row = 0; row < rows; row++)
    for (int col = 0; col < cols; col++)
        arr[row, col] = splitted[row * cols + col];

Ich werde versuchen, eine elegantere Lösung. Richtig mit einigen funktionellen Stil über sie.

Update: Just herauszufinden, es nicht wirklich ist, was man braucht. Damit erhalten Sie einen 2D-Array mit drei Zeilen und 5 Spalten.

Dies ist jedoch gibt Ihnen drei Linien. Sie haben nicht ein Ende ‚‘. Willst du das? Wollen Sie immer es auszudrucken? Oder haben Sie Zugriff auf die verschiedenen Linien haben wollen:

var splitted = input.Split(new [] { ','}, StringSplitOptions.RemoveEmptyEntries); 

var lines = from item in splitted.Select((part, i) => new { part, i })
            group item by item.i / 5 into g
            select string.Join(",", g.Select(a => a.part));

oder mit diesem ziemlich großen Code. Aber ich habe oft eine „Chunk“ Methode benötigt, so dass es wiederverwendbar sein kann. Ich weiß nicht, ob es eine eingebaute „Chunk“ -Methode -. Konnte es nicht finden

public static class LinqExtensions
{
    public static IEnumerable<IList<T>> Chunks<T>(this IEnumerable<T> xs, int size)
    {
        int i = 0;

        var curr = new List<T>();

        foreach (var x in xs)
        {
            curr.Add(x);

            if (++i % size == 0)
            {
                yield return curr;
                curr = new List<T>();
            }
        }
    }
}

Verbrauch:

var lines = input.Split(',').Chunks(5).Select(list => string.Join(",", list));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top