Forever Храни текст разбитый на строки не длинее 64кб. Стока должна состоять из числа выделеной памяти длины строки самой строки. Все эти строки хронить в виде списка. Список лучше представить массивом. опять выделеная память длина массива сам массив. Еще можно извратиться и сделать сложнее в строке хранить указатель на сому страку. И ввести число ссылок на данную строку и указывать предка. И тут тогда без ограничения строк по длине.
Редакторы типа блокнота по-моему не есть нормальные. Возьмите любой редактор под пингвин, либо под другую ОС без развитого гуя. Есть очень хороший и достаточно продвинутый редактор ДОС навигатора, он на паскале, но разобраться думаю будет не сложно.
Pavia Можно подробнее про это? Если ввести ограничение на длину строки, то тогда в принципе есть уже идея как сделать эффективное редактирование. Как ты предполагаешь редактировать строку? Например, раскажи вкратце, как вставить/удалить символ при такой организации.
Когда-то давно мне попадались интересные статьи по написанию едиторов для больших файлов. Сейчас погуглил, откопал это: http://www.catch22.net/tuts В первую очередь смотреть "Design and Implementation of a Win32 Text Editor" и "Memory Management for Large-File Editors".
Forever тут тоже самое. Мы можем оставлять на месте большии участки. Только менять систему ссылок. Правда оно того не стоит.
maxdiver Первую статью начал читать. Пролистал до конца. Довольно таки полезная. Но есть и свои НО. На данном этапе меня не совсем это интересует. Там много полезного про реализацию, однако мало про способ хранения текста. Во-вторых, я скачал полученный в результате редактор и запустил. Открыл текстовый файл на 5 мегабайт и попытался что-нибудь напечатать. Вставка 5 символов заняла 3 секунды. По-моему это просто ужасно. Насчет второй статьи ничего не могу сказать, пока не читал. На данный момент, я прочитал достаточно статей. Сейчас ковыряюсь в исходниках многих редакторов из мира Unix. ( vim, ne, nvi, mc edit, ... ). Так например тот же vim под Windows на легке редактирует файл размеров в 5 мегабайт. Хотелось бы подчеркнуть, что сейчас меня не заботит реализация редактора или контрола. Сейчас мне нужен алгоритм эффективного хранения текста для редактирования.
Forever можно делать так: залить полный текст и сразу сделать двухсвязный список ссылок на начала строк. для нужд редактирования зарезервировать несколько малоиспользуемых симолов под ескейпы. Напр 1h, 2h, и 3h. при удалении символов, не удалять их в реале, а забивать одним из. Напр, 1h при вставке символов, если есть место от удаленных и его хватает, то юзать. Если не хватает и раздвигать текст накладно (скажем, он длиннее страницы), то использовать другой спецсимвол. Скажем, 2h в виде 02 <адр строки для вставки>. Если вставка во вставку - поступать аналогично. если захотелось использовать спец символы как есть, использовать 3й символ. Напр, 3h в виде 03 01 == 01, 03 02 == 02, 03 03 == 03 то что писал Pavia - резиновые буфера и инкрементальное клонирование строк или просто больших буфферов - хорошие техники. Часто ими пользуюсь, даже либа гдето есть. Кстати, никому не надо принтф с настраиваемыми масками (он в тойже либе)?
Forever, вторая статья как раз самая главная по теме Он там какую-то span table предлагает, я не вчитывался. А редактор его - хз, может в нём не реализовано для больших файлов. Но в конце статьи "Memory Management for Large-File Editors (Part 2)" написано, что его метода реализована в его утилите HexEdit (ты эту скачивал или другую?).
На спектруме когда-то редакторы разные писал. Там тупо был буфер в котором весь текст лежал. А при каких=то изменениях остаток текста сдвигался вперёд или назад. Редактор при этом был реактивный, несмотря на почти нулевую скорость Z80 - всё работало прекрастно. Сдвиги конешно ни на каждую нажатую клавишу были. Текущая редактируемая строка была в буфере и тупо пихалась в текст когда, курсор поднимался выше или ниже. Потом когда купил PC тоже самое писать пробовал в досе. Но для больших текстов попросту резал их на непрерывные куски по 64к и держал в связанном списке (некоторые ещё в каком нибудь самопальном свопе держать можно, потому что на экране из них максимум две штуки нужны). Куски резал пополам или сшивал если они становились слишком большими или мелкими. И всё отпадно было....