Также нужно будет некоторые особенности СУБД например: ...
Итак, почему вы не используете СУБД? Или даже решение NoSQL с возможностями запросов, такими как OrientDB?
Я думаю, вы могли бы сделать что-то подобное.
- Сплит текст на куски (главы абзацы фиксированный размер??)
- Сохранить текст в таблице с (по крайней мере) три поля:
текст (фрагмент текста)
НАЧАТЬ (смещение этого фрагмента от начала полного текста)
END (конец смещения этого фрагмента от начала полного текста)
Теперь вы можете написать запрос для извлечения текста между положением х и положением х + N.
SELECT TEXT, BEGIN END
FROM TEXT_TABLE
WHERE END >= x
AND BEGIN <= (x+n)
ORDER BY BEGIN
Finaly у вас есть только для извлечения текста делает что-то вроде:
- от первой строки: подстрока (текст, (х-только начинается))
- от "внутренних" рядов: весь TEXT
- Из последней строки: подстрока (TEXT, 0, (x + n-BEGIN))
Очевидно, что вы также должны позаботиться о «краевых случаях» (результат только с одной или двумя строками, запрошенный диапазон выходит за пределы диапазона. ..).
Но я думаю, что этот подход должен решить вашу проблему без особых усилий.
Надеюсь, это поможет.
Bye,
Raf
выглядит как хорошая задача для ттар() (если вы будете жить в unixland) – wildplasser