Последний раз редактировалось esl; 28.03.2013 в 16:43.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
А если работать с буффером? и обрабатывать блоки при выходе курсора за его пределы?
Подавляющее количество (если не все) текстовых редакторов устроены так как написал esl во втором посте (когда текст расположен вначале и конце памяти а в месте курсора - буфер).
Только процедуру печати экрана целиком нужно делать тоже "двухстороннюю", когда выше курсора текстпечатается снизу вверх (к началу экрана) а ниже курсора - сверху вниз.
Реализация такого редактора получается тривиальной, скорость работы чумовая независимо от размера текста.
При этом больше страницы текста за раз приходится двигать только в случае навигации в начало и конец документа.
Даже не знаю как назвать структуру данных которая предложена(массив с элементами разной длинны и маркером в конце + перемещаемый свободный буфер в средине этого "типо-массива"). Самое интересное что сейчас такие задачи пишутся с какими нибудь двух-связными списками которые сами по себе будут занимать по 6 байт на каждую строку текста+ еще при выделении памяти в самой OS будет хранится куча инфы про выделенные блоки (КОРОЧЕ - МРАКОБЕСИЕ)
Может есть еще у этого алгоритма "продолжение" про то как его расширить для редактирования файлов большего размера чем свободное пространство?
Связные списки всякие - слишком расточительно для ограниченной памяти, там каждый байт на учёт
Я ж писал что микро мир на корвете/ямахе легко работал с файлами больше свободной памяти
Создавал `своп` и работал
Неудобства были ТОЛЬКО при переходах в начало/конец текста
Мог подчитать блок с диска при выходе за границы экрана иногда
Запись файла при выходе - это конечно уже некий процесс, но он не частый, может и потерпеть
в случае если редактор ТОЛЬКО для конкретной машины/случая - може и не стоит
но MIM был (и использовался для работы с БОЛЬШИМИ текстами)
на Ямахе/Корвете/УКНЦ/СМхх
у нас преподы набирали методички в нем, и очень ценили что есть ОДИН файл а не кучка.
хотя это вопрос привычки конечно
в том-же мим очень не привычная для большинства схема копирования/вставки, отдельные буфера для "символов"/"строк"/"кадратных блоков"
при этом уже тогда (1988 как минимум)
было Undo/Redo
Квадратные блоки
"бесконечный" текст
"псевдо директории"
Просто загружаем файл кусками по 16 Кб (из расчета, что у нас 32 Кб памяти под текст). Экран при этом занимать больше чем 16 Кб не должен. Сложность лишь при сохранении, придется весь файл сдвигать, если редактируемый кусок изменил размер
Последний раз редактировалось vinxru; 02.04.2013 в 09:44.
А какая операция в типичном текстовом редакторе выполняется чаще- навигация по тексту или редактирование в начале большого текста?
Vitamin, Редактирование в произвольном месте. не?
С уважением,
Jerri / Red Triangle.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)