Важная информация

User Tag List

Страница 6 из 13 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя
Показано с 51 по 60 из 124

Тема: Как организовать память для текстового редактора?

  1. #51
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,259
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    85
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru Посмотреть сообщение
    Тогда при первом нажатии клавиши возникнут тормоза и даже если первые символы не потеряются, это будет не очень приятно.
    Откуда тормоза? От копирования 65 символов?

  2. #52
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Откуда тормоза? От копирования 65 символов?
    А если я перемещусь в конец текста и там нажму кнопку?

  3. #53
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,259
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    85
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru Посмотреть сообщение
    А если я перемещусь в конец текста и там нажму кнопку?
    Какая разница куда переместишься? Для заполнения буфера достаточно два указателя- на начало текущей строки (он всегда есть) и на начало следующей (он тоже вычисляется для перемещения). А где эти указатели (в начале, в середине, в конце) - глубоко пофиг.

  4. #54
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,058
    Спасибо Благодарностей отдано 
    224
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от esl Посмотреть сообщение
    Текст до курсора - от начала памяти и до курсора
    Текст после курсора в конце памяти
    Т.е свободное место в середине
    При перемещении курсора - перемещаем строки в памяти
    Да это же гениальная идея! Просто в реализации, мало накладных расходов по памяти и практически всегда не тормозит на текстах любых размеров. Я когда-то пытался сделать для Speccy редактор и тоже думал над этой проблемой, но к такому красивому решению не пришел. Спасибо!

    К слову о связных списках: подобный подход, по-моему, применяется в редакторе Far. Он позволяет иметь строки произвольного размера и/или редактировать большие файлы.

  5. #55
    Guru Аватар для bigral
    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Он позволяет иметь строки произвольного размера и/или редактировать большие файлы.
    Вот тут не понял. Собственно про это уже спросил 2 раза но внятно никто не ответил как это сделать.

    Детально можно описать алгоритм как отредактированный кусок текста из памяти "вклеится" в то "окно" которое занимал старый текст (отредактированный текст может быть длинее или короче)?

    По-моему возникает проблема аналогичная той ситуации что возникает в памяти редактора с "классическим" подходом, нужно вычислить размер нового текста и передвинуть остаток файла вперед или назад а потом вписать содержимое памяти в "подогнанное" окно на диске (довольно муторная и дорогая операция по-моему, особенно с такой файловой системой как в TR-DOS).

  6. #56
    R.I.P.
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    3. По поводу БОЛЬШИХ файлов я так и не понял что с ними делать, вот у меня есть логи на работе размерами по 1GB ни один из редакторов под linux c ними нормально не работает (помнится под DOS были редакторы которые и по 10Mb логи смотрели без проблем). Это конечно другая задача НО все же, как создать swap file и как его использовать эфективно?

    это можно пременить к большим файлам, но смысла нет,
    эт скорее схема для экономии памяти

    но все-же,
    собственно этому методу в памяти "нужно" держать только то что сейчас на экране
    все что вне экрана спокойно может быть в "свопе"
    и догружаться в память по надобности.

    а гигабайтный логи в редактор грузить - имхо изврат редкий
    их же не нужно редактировать, их нужно смотреть, другая задача ...
    Последний раз редактировалось esl; 02.04.2013 в 19:17.

  7. #57
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    Вот тут не понял. Собственно про это уже спросил 2 раза но внятно никто не ответил как это сделать.

    Детально можно описать алгоритм как отредактированный кусок текста из памяти "вклеится" в то "окно" которое занимал старый текст (отредактированный текст может быть длинее или короче)?

    По-моему возникает проблема аналогичная той ситуации что возникает в памяти редактора с "классическим" подходом, нужно вычислить размер нового текста и передвинуть остаток файла вперед или назад а потом вписать содержимое памяти в "подогнанное" окно на диске (довольно муторная и дорогая операция по-моему, особенно с такой файловой системой как в TR-DOS).
    Дак правильно говоришь. Загружаем в память кусок файла размером в 32 Кб, после редактирования он у нас изменяет свой размер. Дальше нам надо сдвинуть весь файл, что бы сохранить этот блок.

    Этого не избежать, в любом случае придется сдвигать байты на диске. Хоть ты весь файл в оперативку загрузи.

    ---------- Post added at 19:17 ---------- Previous post was at 19:13 ----------

    А алгоритм получается простой. Перерисовка экрана происходит от положения курсора вверх и вниз. Если при перерисовке мы достигаем конца ОЗУ, то есть еще не всё нарисовали, а данные кончились, значит надо младшие 16 Кб скинуть на диск (или сколько там получилось после редактирования), переместить оставшиеся 16 Кб в начало и загрузить в конец следующие 16 Кб из файла.

  8. #58
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,058
    Спасибо Благодарностей отдано 
    224
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от esl Посмотреть сообщение
    а гигабайтный логи в редактор грузить - имхо изврат редкий
    их же не нужно редактировать, их нужно смотреть, другая задача ...
    Почему же? Идея вполне имеет право на существование. Логи разные бывают. Например, если софт, который сохраняет логи, содержит баг, что приводит к нечитаемости логов другим софтом. С помощью редактора иногда можно подправить лог, чтобы он читался как надо. Когда пишешь и отлаживаешь свою программу, сохраняющую логи, такая ситуация может встречаться часто.

    Ну и потом, что гигабайты на современных компах - то сотни килобайт на Speccy. Подход тот же самый. Прочитать или записать 300кБ с дискеты занимает примерно то же время, а в стандартную память такой файл не влезает.

    Как приспособить эту схему к редактированию файлов, которые не влезают в память - пока не могу придумать. Но для работы с файлами в памяти она подходит очень хорошо.

  9. #59
    R.I.P.
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Почему же? Идея вполне имеет право на существование. Логи разные бывают. Например, если софт, который сохраняет логи, содержит баг, что приводит к нечитаемости логов другим софтом. С помощью редактора иногда можно подправить лог, чтобы он читался как надо. Когда пишешь и отлаживаешь свою программу, сохраняющую логи, такая ситуация может встречаться часто.
    не, эт неправильно, логи парсить надо не редакторм а скриптом на ruby/perl/python
    они на это заточены, и ворочают ими с сумашедшими скоростями
    сколько раз уж делал такие "фиксеры"

    java мир ух как любит многопоточные логи ....

  10. #60
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,058
    Спасибо Благодарностей отдано 
    224
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Придумал, как редактировать большие файлы.

    Для этого требуется не один, а два своп-файла. Их совокупный размер может вырасти вплоть до размеров оригинального файла минус объем доступной в качестве буфера оперативной памяти, так что если имеется дискета на 800кБ - то на ней можно будет редактировать файлы до ~400кБ размера, если хранить своп-файл на ней же.

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

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

    Очень эффективно. При таком подходе копирование больших кусков данных на диске сводится к минимуму.

    ---------- Post added at 20:01 ---------- Previous post was at 19:58 ----------

    Цитата Сообщение от esl Посмотреть сообщение
    не, эт неправильно, логи парсить надо не редакторм а скриптом на ruby/perl/python
    Если изменения большие - то можно скриптом, а если небольшие - то сойдет и редактор. Это быстрее, чем писать и отлаживать скрипт. Я часто этим занимался по работе (патчил логи), правда, от их размера редактор (Far) не усирался.

    А MIM - это очень мощный редактор. На нем я набирал и редактировал свой диплом, хотя на дворе был уже 2000й год, и мне тогда были доступны редакторы на PC (Far, Word и др.). Тем не менее по совокупности критериев был выбран MIM как наиболее удобный и экономящий время/усилия.
    Последний раз редактировалось Barmaley_m; 02.04.2013 в 21:05. Причина: исправил ошибки в тексте

Страница 6 из 13 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Алгоритм текстового Quest'a
    от ALKO в разделе Программирование
    Ответов: 11
    Последнее: 23.12.2010, 00:47
  2. Как проще код из текстового файла -> Alasm-файл?
    от TomCaT в разделе Программирование
    Ответов: 10
    Последнее: 28.05.2010, 16:53
  3. Адаптация текстового редактора
    от Raydac в разделе Софт
    Ответов: 1
    Последнее: 09.06.2008, 14:27
  4. Интересная идея текстового интерфейса в играх
    от Black_Cat в разделе Программирование
    Ответов: 3
    Последнее: 18.11.2006, 15:22
  5. Проект муз. редактора для AY
    от Bulba в разделе Музыка
    Ответов: 36
    Последнее: 09.09.2005, 20:32

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •