Хранение текста для редактирования

Тема в разделе "WASM.A&O", создана пользователем Forever, 30 дек 2008.

  1. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    K10
    для чтения
     
  2. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    http://directory.fsf.org/category/editors/
     
  3. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    http://wasm.ru/forum/viewtopic.php?pid=250581#p250581
    Надеюсь, что AsmGuru62 не против
     
  4. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Определённо не против. :)
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Forever
    Храни текст разбитый на строки не длинее 64кб. Стока должна состоять из числа выделеной памяти длины строки самой строки.
    Все эти строки хронить в виде списка. Список лучше представить массивом.
    опять выделеная память длина массива сам массив.

    Еще можно извратиться и сделать сложнее в строке хранить указатель на сому страку. И ввести число ссылок на данную строку и указывать предка. И тут тогда без ограничения строк по длине.
     
  6. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Редакторы типа блокнота по-моему не есть нормальные. Возьмите любой редактор под пингвин, либо под другую ОС без развитого гуя. Есть очень хороший и достаточно продвинутый редактор ДОС навигатора, он на паскале, но разобраться думаю будет не сложно.
     
  7. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Pavia
    Можно подробнее про это? Если ввести ограничение на длину строки, то тогда в принципе есть уже идея как сделать эффективное редактирование. Как ты предполагаешь редактировать строку? Например, раскажи вкратце, как вставить/удалить символ при такой организации.
     
  8. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
    Когда-то давно мне попадались интересные статьи по написанию едиторов для больших файлов.
    Сейчас погуглил, откопал это:
    http://www.catch22.net/tuts
    В первую очередь смотреть "Design and Implementation of a Win32 Text Editor" и "Memory Management for Large-File Editors".
     
  9. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Forever
    тут тоже самое. Мы можем оставлять на месте большии участки. Только менять систему ссылок. Правда оно того не стоит.
     
  10. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    maxdiver
    Первую статью начал читать. Пролистал до конца. Довольно таки полезная. Но есть и свои НО. На данном этапе меня не совсем это интересует. Там много полезного про реализацию, однако мало про способ хранения текста. Во-вторых, я скачал полученный в результате редактор и запустил. Открыл текстовый файл на 5 мегабайт и попытался что-нибудь напечатать. Вставка 5 символов заняла 3 секунды. По-моему это просто ужасно.
    Насчет второй статьи ничего не могу сказать, пока не читал.

    На данный момент, я прочитал достаточно статей. Сейчас ковыряюсь в исходниках многих редакторов из мира Unix. ( vim, ne, nvi, mc edit, ... ). Так например тот же vim под Windows на легке редактирует файл размеров в 5 мегабайт.
    Хотелось бы подчеркнуть, что сейчас меня не заботит реализация редактора или контрола. Сейчас мне нужен алгоритм эффективного хранения текста для редактирования.
     
  11. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Forever
    можно делать так:
    залить полный текст и сразу сделать двухсвязный список ссылок на начала строк.

    для нужд редактирования зарезервировать несколько малоиспользуемых симолов под ескейпы. Напр 1h, 2h, и 3h.

    при удалении символов, не удалять их в реале, а забивать одним из. Напр, 1h

    при вставке символов, если есть место от удаленных и его хватает, то юзать. Если не хватает и раздвигать текст накладно (скажем, он длиннее страницы), то использовать другой спецсимвол. Скажем, 2h в виде 02 <адр строки для вставки>. Если вставка во вставку - поступать аналогично.

    если захотелось использовать спец символы как есть, использовать 3й символ. Напр, 3h в виде 03 01 == 01, 03 02 == 02, 03 03 == 03

    то что писал Pavia - резиновые буфера и инкрементальное клонирование строк или просто больших буфферов - хорошие техники. Часто ими пользуюсь, даже либа гдето есть. Кстати, никому не надо принтф с настраиваемыми масками (он в тойже либе)?
     
  12. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    давай, я не прочь взглянуть
     
  13. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    RamMerLabs
    када домой приеду
     
  14. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
    Forever, вторая статья как раз самая главная по теме :) Он там какую-то span table предлагает, я не вчитывался.
    А редактор его - хз, может в нём не реализовано для больших файлов. Но в конце статьи "Memory Management for Large-File Editors (Part 2)" написано, что его метода реализована в его утилите HexEdit (ты эту скачивал или другую?).
     
  15. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    На спектруме когда-то редакторы разные писал. Там тупо был буфер в котором весь текст лежал. А при каких=то изменениях остаток текста сдвигался вперёд или назад. Редактор при этом был реактивный, несмотря на почти нулевую скорость Z80 - всё работало прекрастно. Сдвиги конешно ни на каждую нажатую клавишу были. Текущая редактируемая строка была в буфере и тупо пихалась в текст когда, курсор поднимался выше или ниже.

    Потом когда купил PC тоже самое писать пробовал в досе. Но для больших текстов попросту резал их на непрерывные куски по 64к и держал в связанном списке (некоторые ещё в каком нибудь самопальном свопе держать можно, потому что на экране из них максимум две штуки нужны). Куски резал пополам или сшивал если они становились слишком большими или мелкими. И всё отпадно было....