· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.A&O —› Текстовый редактор

. 1 . 2 . 3 . >>

Посл.отвђт Сообщенiе


Дата: Янв 9, 2004 03:56:49

Существуют ли специальные алгоритмы для редактирования текста? У меня текст - просто ASCIIZ строка и при вставлении символа в начало, в середину, весь хвост сдвигается вправо, что не есть хорошо, а на большее мозгов не хватает. :(


Дата: Янв 9, 2004 04:41:56

Ты же вопрос конкретно не задал. Скажи хоть, что тебе нужно сделать.


Дата: Янв 9, 2004 04:44:40

не спится?


Дата: Янв 9, 2004 04:52:57

Toxic
Алгоритм... (жалестно так... :)
Ну куда уж конкретней, хочу выяснить, как надо с текстом работать. Не катит что-то двигать 64k туда-обратно,когда юзер просто стер маленькую букву в начале текста и приписал заглавную. Естественно, это не единственный случай, он же может и абзацы местами поменять, и ошибки в середине 500k-байтного текста править, он же офигеет, когда на каждое нажатие клавиши я начну все это по памяти гонять, а ведь еще и окошко перерисовывать нужно...


Дата: Янв 9, 2004 04:57:13

дык а нах оно тебе надо? эдит же сам это все делает... или ты его не собираешься юзать?


Дата: Янв 9, 2004 05:01:48

полусонный я, так что не пинайте сильно
Самое простое, что приходит в голову - читать в какой-нибудь буффер текущий ввод пользователя, и изменять "хранилище текста" когда этот буфер целиком заполнится.


Дата: Янв 9, 2004 05:02:32

Sickle
Edit 500Кб делает очень плохо...

hGoblin
Файл можно разбить на несколько фрагментов по ~1Кб и работать с ними по отдельности. По этой теме я не слышал о существовании каких бы то ни было специальных алгоритмов.


Дата: Янв 9, 2004 05:09:12

Sickle
Ага, эдит мне нафиг не нужен. Все свое, родное :)
Quantum
Дык, разобью, а юзер вылезет за границу килобайта. Новый резервировать? а он туда один симол нарисует и в следующий фрагмент пойдет,... Я так быстро всю память забью :(


Дата: Янв 9, 2004 05:11:57

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


Дата: Янв 9, 2004 05:16:48

Самое простое, что приходит в голову - читать в какой-нибудь буффер текущий ввод пользователя, и изменять "хранилище текста" когда этот буфер целиком заполнится.
Главное забыл. В буфер этот писать надо окромя самих буковок ещё и их позиции, естественно. И тогда настанет счастие.


Дата: Янв 9, 2004 05:19:04

hGoblin
Новый резервировать?
Можно предусмотреть запас около 10-25% на такой случай. Последний раз я такое на Турбо-Паскале писал, в школе...

Можно ещё по принципу БД устроить, хотя тоже самое будет в конечном счёте. Есть тут спец. по этим вопросам, но он обижается, когда его так называют :-)


Дата: Янв 9, 2004 05:27:56

coder, Quantum
Спасибо, напишу буфер с запасом :)


Дата: Янв 9, 2004 11:33:51

Лшь бы у вас в итоге ОС не получилась, а то файлы писать, запас 10-25% это очень большая цифра.
hGoblin
Какую прогу ты пишешь?


Дата: Янв 9, 2004 12:22:39

Lex
Какую прогу ты пишешь?
Дык, текстовый редактор :) Только мне нужны различные шрифты, изображения, произвольное расположение этого добра и тотальный контроль. Так что richedit отпадает. На мой вкус, к счастью.


Дата: Янв 9, 2004 16:59:59

hGoblin
Я не помню писал ли это или нет.
Глянька разреженные массивы.

А так в кратсе.
Массив значешь что такое???

Во..

Теперь что такое разреженный массив.

Это когда он в памяти распологается прерывисто.

Например, пусть 0 элемент массива -- его размер.
Элемент 1 -- Используемый размер
Последний элемент -- указатель на следующий блок массива.

Итак.
Вот наш массив, пока он непрерывен. Мы договариваемся, что будем выделять память блоками по 4k
[========================]

Если пользователь ткнул букву...

[===*====================]


Что мы делаем???

1. Выделяем 4k
2. Определяем в каком 4k блоке произошло изменение
3. Копируем кусок после в новую память
4. Устанавливаем указатели

Теперь у нас 2 блока

[===*->[указатель на блок 20000000]================]

2
-> [==============]

Я надеюсь было чуть чуть понятно.

. 1 . 2 . 3 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.072