0

StreamWriterを使用してサーバー上のテキストファイルに書き込んでいるJS配列があります。これはそれを行う行です:

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

現在、配列の内容全体を含む1行が書き出されています。5つのコンマごとに新しい行を書きたいです。配列の例:

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

出力する必要があります:

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

文字列置換を使用できることは知っていますが、指定された量のコンマの後ではなく、すべてのコンマの後にこの出力を新しい行にする方法しか知りません。

どうすればこれを実現できますか?

ありがとう!

4

2 に答える 2

2

さて、これが私が考えることができる最も簡単な答えです:

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

それはそれほどエレガントではありませんが、それは仕事を成し遂げるでしょう、と私は信じています。

必要に応じて、後でこれで現在の行を終了することができます。

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

賢い方法があると確信しています...しかし、これは簡単です。

1つの質問:値は常に3文字の長さですか?もしそうなら、あなたは基本的に20文字ごとに文字列を分割しているだけだからです...

于 2010-08-05T19:39:52.140 に答える
0

何かのようなもの:

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

もっとエレガントな解決策を見つけようと思います。その上にいくつかの機能的なスタイルで適切に。

更新:それが実際に必要なものではないことを確認してください。これにより、3行5列の2D配列が得られます。

ただし、これにより3行になります。末尾に「、」はありません。あなたはそれが欲しいですか?いつも印刷しますか?または、別の回線にアクセスしたいですか?:

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

または、このかなり大きなコードによって。しかし、再利用できるように、「チャンク」方式が必要になることがよくあります。組み込みの「チャンク」メソッドがあるかどうかはわかりませんが、見つかりませんでした。

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

使用法:

var lines = input.Split(',').Chunks(5).Select(list => string.Join(",", list));
于 2010-08-05T19:42:01.290 に答える