Как сделать TextEdit для больших файлов.

Тема в разделе "WASM.A&O", создана пользователем tigsid, 5 ноя 2005.

  1. tigsid

    tigsid Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    62
    Ни как не могу додуматся как редактировать большой файл.

    Если просто вставлять один символ в текст то ясно что все будет тормозить.

    Значит надо разбивать текст на блоки например по 100 строк и работать с ними.

    Первой и пока единственное что пришло на ум это двухсвязный список.

    Каждый элемент списка будет блок текста.

    при добавлении строки или переполнении блока просто создается новый блок.

    А при удалении смотрим можно объединить соседние блоки.



    Мне кажется это плохая идея. Все должно быть проще. Может кто даст какую-нибудь нормальную идею.

    Зарание благодарю.
     
  2. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    А какой величины файлы?
     
  3. tigsid

    tigsid Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    62
    Ну думаю хотябы 300 000 строк по 60 символов, т.е. около 17 метров.

    Хотя реально не найдется текстовый файл больше чем на 20 000 строк, т.е. всего на метр.

    Но хотелось чтобы можно было быстро работать с файлом на 300 метров.
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    нужно тестить на файлах в 500Мб
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Проверил на 17 Мег - richedit вставляет и отображает мгновенно, правда потом, при сохранении файла на диск около 3 сек нужно.
     
  6. tigsid

    tigsid Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    62
    Я не знаю как richedit работает.

    Мне нужна какая-нибудь идея по редакт. файлов.
     
  7. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    Смотри исходники IDE от FASM'a
     
  8. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Ну так разбей на строки и положи их не в список, а в динамический массив указателей на эти строки. А если строки могут быть длиной больше нескольких килобайт - уже строки начинай бить на блоки, вставка в короткий блок работает быстрее, чем в целую строку. А текщий блок на время редактирования помещай в статический буфер раза в 2 больше размера блока, чтобы избежать слишком частого перевыделения памяти.
     
  9. TheRawGod

    TheRawGod New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    71
    File mapping?



    Взгляни на CreateFileMapping() и иже с ними в MSDN.
     
  10. tigsid

    tigsid Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    62
    Да возможно динамический масив будет лучше. И памяти чуть меньше занимает и доступ быстрей.

    Вот только стоит ли делать блок меньше 10кб незнаю.

    Файл маппировать надо точно - это понятно.
     
  11. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    FileMapping - фтопку. Там вставка символа столько времени займет, что можно будет за это время файл десять раз вгрузить и выгрузитью. А если файл больше двух гиг... Ну, во общем, ясно.
     
  12. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Можно сделать так: если строки по 60 символов, выдели на каждую вдвое больше, например 128 байт. Зачитай файл в память, побей на строки, чтобы каждая начиналась с адреса кратного 128. Если редактируемая строка после редактирования вместилась в прежние 128 байт, никаких телодвижений. Если нет - выделил кусок под новую строку 128 байт, и дописал в неё, при этом сдвинув адреса в таблице указателей, чтобы вставить указатель на нужную строку. Это всё будет делаться достаточно быстро. Только как ты собрался отображать рваные куски текста в своём едите? Пусть даже двусвязный список, как?

    Может проще с richedit'ом научиться :)))
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Вот тема была



    Пардон, именно "была". Смотрите оффлайн-версию форума, поиск по ключевым словам: редактор текста.
     
  14. SDragon

    SDragon New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2005
    Сообщения:
    133
    Адрес:
    Siberia
    http://catch22.net/tuts/editor01.asp



    Там же куча полезных ссылок, из которых особенно рекомендую

    http://catch22.net/tuts/zips/crowley.zip -

    старое, но все еще актуальное исследование по структурам данных, применяемым в текстовых редакторах. Именно этот документ тебе и нужен, tigsid.
     
  15. tigsid

    tigsid Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    62
    SDragon большое спасибо. Это мне сейчас и нужно.