Вы также можете приблизиться к этому с помощью LINQ, используя перегрузку индекса , равную .Select
, чтобы сохранить счетчик количества номеров строк, а затем сгруппировать их в группы по 3 - я использовалцелочисленное деление на Floor
строковый индекс, 3 за раз, но, вероятно, есть и другие подходящие способы.
var groups = values.Select((s, idx) => (Index: idx / 3, Value: s))
.GroupBy(x => x.Index);
Где каждый элемент в вышеуказанных группах будет IEnumerable<(Index, Value)>
.
Вам также нужно быть осторожным с символами новой строки - в Windows это может быть \r\n
, а не только указанный вами \n
.
Вот пример:
var a =
@"A2,
10.22,
-57,
A,
10.23,
-68,
A2,
10.24,
-60,
LB,
10.25,
-62,";
var values = a.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
var groups = values.Select((s, idx) => (Index: idx / 3, Value: s))
.GroupBy(x => x.Index);
foreach (var grp in groups)
{
Console.WriteLine(string.Join("", grp.Select(x => x.Value)));
}
Поскольку у вас уже есть запятые в конце каждой строки (включая последнюю), нет необходимости добавлять еще один разделитель.
Вывод:
A2,10.22,-57,
A,10.23,-68,
A2,10.24,-60,
LB,10.25,-62,