Что-то вроде:
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 столбцами.
Это, однако, даст вам 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));
Или с помощью этого довольно большого кода. Но я часто нуждался в методе «чанка», поэтому его можно использовать повторно. Я не знаю, есть ли встроенный метод "Chunk" - не смог его найти.
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));