2

こんにちは、私は長いひもを持っています。リターンカーラージが多いフォーマットに分割したいです。各行には 5 つの短い単語があります。元。

string input="'250.0','250.00','250.01','250.02','250.03','250.1','250.10','250.11','250.12','250.13','250.2','250.20','250.21','250.22','250.23','250.3','250.30','250.31','250.32','250.33','250.4','250.40','250.41','250.42','250.43','250.5','250.50','250.51','250.52','250.53','250.6','250.60','250.61','250.62','250.63','250.7','250.70','250.71','250.72','250.73','250.8','250.80','250.81','250.82','250.83','250.9','250.90','250.91','250.92','250.93','357.2','357.20','362.01','362.02','362.03','362.04','362.05','362.06','362.07','366.41','648.0','648.00','648.01','648.02','648.03','648.04'";

66個の短い単語があります。

string output = "'250.0','250.00','250.01','250.02','250.03',
                 '250.1','250.10','250.11','250.12','250.13',
                 '250.2','250.20','250.21','250.22','250.23',
                 '250.3','250.30','250.31','250.32','250.33',
                 '250.4','250.40','250.41','250.42','250.43',
                 '250.5','250.50','250.51','250.52','250.53',
                 '250.6','250.60','250.61','250.62','250.63',
                 '250.7','250.70','250.71','250.72','250.73',
                 '250.8','250.80','250.81','250.82','250.83',
                 '250.9','250.90','250.91','250.92','250.93',
                 '357.2','357.20','362.01','362.02','362.03',
                 '362.04','362.05','362.06','362.07','366.41',
                 '648.0','648.00','648.01','648.02','648.03',
                 '648.04'";

例のように最初に文字列の char ',' をカウントする必要があると思いました。しかし、それはちょっと不器用かもしれません。

アドバイスをありがとう。

4

5 に答える 5

2

私があなたのことを正しく理解しているなら、あなたはそうしたい

  • それらの単語をコンマで区切って
  • 結果を、各行に 5 つの単語が含まれる行にグループ化します
  • Environment.NewLine区切り記号として文字列を作成する

string input = "'250.0','250.00','250.01','250.02','250.03','250.1','250.10','250.11','250.12','250.13','250.2','250.20','250.21','250.22','250.23','250.3','250.30','250.31','250.32','250.33','250.4','250.40','250.41','250.42','250.43','250.5','250.50','250.51','250.52','250.53','250.6','250.60','250.61','250.62','250.63','250.7','250.70','250.71','250.72','250.73','250.8','250.80','250.81','250.82','250.83','250.9','250.90','250.91','250.92','250.93','357.2','357.20','362.01','362.02','362.03','362.04','362.05','362.06','362.07','366.41','648.0','648.00','648.01','648.02','648.03','648.04'";
int groupCount = 5; 
var linesGroups = input.Split(',')
    .Select((s, index) => new { str = s, Position = index / groupCount, Index = index })
    .GroupBy(x => x.Position);

StringBuilder outputBuilder = new StringBuilder();
foreach (var grp in linesGroups)
{
    outputBuilder.AppendLine(String.Join(",", grp.Select(x => x.str)));
}
String output = outputBuilder.ToString();

編集:結果は次のとおりです。

'250.0','250.00','250.01','250.02','250.03'
'250.1','250.10','250.11','250.12','250.13'
'250.2','250.20','250.21','250.22','250.23'
'250.3','250.30','250.31','250.32','250.33'
'250.4','250.40','250.41','250.42','250.43'
'250.5','250.50','250.51','250.52','250.53'
'250.6','250.60','250.61','250.62','250.63'
'250.7','250.70','250.71','250.72','250.73'
'250.8','250.80','250.81','250.82','250.83'
'250.9','250.90','250.91','250.92','250.93'
'357.2','357.20','362.01','362.02','362.03'
'362.04','362.05','362.06','362.07','366.41'
'648.0','648.00','648.01','648.02','648.03'
'648.04'

すべての行にコンマを追加する場合(例のように):

foreach (var grp in linesGroups)
{
    outputBuilder.AppendLine(String.Join(",", grp.Select(x => x.str)) + ",");
}
// remove last comma + Environment.NewLine
outputBuilder.Length -= ( 1 + Environment.NewLine.Length );
于 2012-05-08T14:31:32.497 に答える
0
var input="'250.0','250.00','250.01','250.02','250.03','250.1','250.10','250.11','250.12','250.13','250.2','250.20','250.21','250.22','250.23','250.3','250.30','250.31','250.32','250.33','250.4','250.40','250.41','250.42','250.43','250.5','250.50','250.51','250.52','250.53','250.6','250.60','250.61','250.62','250.63','250.7','250.70','250.71','250.72','250.73','250.8','250.80','250.81','250.82','250.83','250.9','250.90','250.91','250.92','250.93','357.2','357.20','362.01','362.02','362.03','362.04','362.05','362.06','362.07','366.41','648.0','648.00','648.01','648.02','648.03','648.04'";

var wordsArray = input.Split(',');
var sbOutput = new StringBuilder();

for (int i = 1; i < wordsArray.Length +1; i++)
{
    sbOutput.AppendFormat("{0},", wordsArray[i-1]);

    if(i % 5 == 0)
        sbOutput.AppendLine();
}

var output = sbOutput.ToString();
于 2012-05-08T14:43:15.597 に答える
0

次のようにします。

string[] words = input.Split(','); 
int wordsInString = words.Length;
于 2012-05-08T14:36:21.887 に答える
0

この解決策はどうですか:

private static IEnumerable<string> SplitLongString(string input, char separator, int groupSize)
{
    int indexCurrent = 0;
    int indexLastOccurence = 0;
    int separatorCounter = 0;

    foreach (var character in input)
    {
        indexCurrent++;

        if (character == separator)
        {
            separatorCounter++;

            if (separatorCounter % groupSize == 0)
            {
                yield return input.Substring(indexLastOccurence, indexCurrent - indexLastOccurence);
                indexLastOccurence = indexCurrent;
            }
        }
    }

    if (indexCurrent != indexLastOccurence)
    {
        yield return input.Substring(indexLastOccurence, indexCurrent - indexLastOccurence);
    }
}

そして、あなたはそれを呼ぶでしょう:

var result = SplitLongString(input, ',', 5);

foreach (var row in result)
{
    Console.WriteLine(row);
}
于 2012-05-08T15:01:06.817 に答える
0

最も簡単な方法は、@Tim の削除済み (編集: もう削除されていません) の回答からのアプローチに従うことです。

  1. 文字列をカンマで分割します ( を使用string.Split)
  2. 得られたパーツを必要に応じて並べ替えます。たとえば、5 個ずつ並べて並べます。

そのようなもの(テストされていません):

Console.WriteLine("string output =");
var parts = sourceString.Split(',');
int i = 0;
for (; i < parts.Length; i++)
{
    if (i % 5 == 0)
        Console.Write('    "');
    Console.Write(parts[i]);
    Console.Write(',');
    if (i % 5 == 4 && i != parts.Length - 1)
        Console.WriteLine('" +');
}
Console.WriteLine('";');
于 2012-05-08T14:35:37.360 に答える