Хороший способ сохранить данные при написании текстового редактора - PullRequest
11 голосов
/ 25 января 2011

Я планирую сделать текстовый редактор в c. Поэтому просто хотелось узнать, какая структура данных хороша для сохранения текста. Я читал, используя связанный список, был один из способов сделать это, но не эффективный. Пожалуйста, укажите мне некоторые ссылки, где я могу получить хорошее представление о том, что нужно использовать. Я планирую использовать библиотеку ncurses для получения пользовательского ввода и ввода ключей и пользовательского интерфейса.

Использование исходного кода существующих редакторов является слишком сложным, все текстовые редакторы огромны, даже консольные редакторы. Любой простой консольный редактор исходного кода для справки?

Ответы [ 5 ]

8 голосов
/ 25 января 2011

Вы получите чтение о буферах Emacs .Также см. этот блог , особенно последний комментарий, цитируемый здесь для удобства:

Во многих версиях Emacs, включая GNU, используется один непрерывный массив символов, фактически разделенный на две секции.разделены пробелом.Для вставки пробела сначала перемещается в точку вставки.Вставленные символы заполняют пробел, уменьшая его размер.Если для хранения символов недостаточно места, весь буфер перераспределяется на новый больший размер, а пробелы объединяются в предыдущей точке вставки.

Наивный взгляд на это и говорит, что производительность должна быть низкой из-за всехкопирование связано.Неправильно.Операция копирования невероятно быстра и может быть оптимизирована различными способами.Буферы разрыва также используют преимущества шаблонов использования.Вы можете прыгать по всему окну, прежде чем фокусироваться и вставлять текст.Пробел не перемещается для отображения - только для вставки (или удаления).

С другой стороны, вставка блока символов в начало файла размером 500 МБ и вставка другого в конце является худшим случаем дляподход разрыва, особенно если размер разрыва превышен.Как часто это происходит?

Непрерывные блоки памяти ценятся в средах виртуальной памяти, потому что требуется меньше подкачки.Более того, операции чтения и записи упрощаются, поскольку файл не нужно анализировать и разбивать на другие структуры данных.Скорее, внутреннее представление файла в буфере гэпа идентично диску и может быть оптимально считано и записано.Сами записи могут быть выполнены одним системным вызовом (на * nix).

Буфер с пропуском - лучший алгоритм для редактирования текста в общем виде.Он использует наименьшее количество памяти и обладает самой высокой совокупной производительностью по сравнению с различными вариантами использования.Перевод буфера гэпа в визуальное окно немного сложнее, поскольку контекст строки должен постоянно поддерживаться.

3 голосов
/ 25 января 2011

Если вы хотите, чтобы оно масштабировалось, вы должны использовать форму сбалансированного бинарного дерева. Можно сделать так, чтобы в основном все операции - вставка, удаление, поиск символа, поиск строки и т. Д. - были O(log n). Если вам важны только «нормальные» размеры файлов для текста (максимум несколько мегабайт), то не имеет значения, какие структуры вы используете.

1 голос
/ 25 января 2011

(очень старая) книга Программные инструменты в Pascal реализует полный ed-style (думаю vim ) текстовый редактор, поиск и замена регулярных выражений включены. Он использует массивы для хранения отредактированного текста.

1 голос
/ 25 января 2011

Вы должны «сохранить» данные в виде простого текста. Если вы имеете в виду, как хранить данные в памяти, я рекомендую простой связанный список.

Если это просто текстовый редактор (а не текстовый процессор), я выбрал способ сохранить каждую строку в своем собственном узле ссылки.

Это хороший простой подход, который позволяет легко вставлять и удалять строки. А вставка или удаление текста эффективны, поскольку при вставке или удалении текста необходимо смещать только данные в текущем узле.

Вы сказали, что не хотите смотреть на исходный код, но, тем не менее, вы можете скачать версию, которую я написал много-много лет назад на http://www.softcircuits.com/sw_dos.aspx, скачав pictor.zip, чтобы увидеть простой текстовый редактор.

1 голос
/ 25 января 2011

Эта ссылка предоставляет полезную информацию - Пример использования редактора документов "Что видишь, то и получишь" (или "WYSIWYG")

...