Вот решение, использующее LINQ для получения набора символов на основе списка указанных «страниц».
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//...
public static void TestStringSplit()
{
var s = "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.";
var chars = s.ToCharArray().AsEnumerable();
var pages = new List<int>() { 8, 4, 5, 3, 50, 50 };
var output = new List<string>();
for (int i = 0; i < pages.Count; i++)
{
var page = pages[i];
output.Add(String.Join("",
chars.Skip(pages.Where((p, j) => j < i).Sum(p => p)).Take(page)
));
}
output.ForEach(o => Console.WriteLine(o));
}
возвращается:
12345678
9012
34567
890
12345678901234567890123456789012345678901234567890
1234567890123456789012345678901234567890.
В приведенном выше примере,
- Переменная
pages
представляет размер каждой подстроки, которую вы хотите извлечь из основной строки.
- В выражении
Skip
LINQ пропускаются все символы, которые уже были "разбиты на страницы".
- Выражение
Take
LINQ возвращает группу символов, которые соответствуют ожидаемому размеру.
Преимущество использования перечислимого значения char
s состоит в том, что вы не получаете индекс вне диапазона исключений в вызове Skip
, как вы это обычно делаете при вызове Substring
.
Как вы заполняете переменную pages
данными и как вы получаете значения в output
в базу данных, зависит от вашей реализации, но это должно дать вам хорошее начало.