V_a_d |
Отправлено: 29.11.2004, 16:49 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 4
|
Такая задача:
Имеем большой текст в строке (например, 1000000 символов). Надо после каждого 100-го символа вставить " перенос строки" и потом вывести в Memo или в RichEdit. И чтобы это было БЫСТРО!!! (до 3-х секунд).
Ваши предложения? |
|
Konstantine |
Отправлено: 29.11.2004, 17:43 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
перечитывать блоками и вставлять в другой файл... ограничение — витчестер может не успеть... 2 мега разнотипных обращений в секунду...
|
|
Gedeon |
Отправлено: 29.11.2004, 18:35 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Ну, мысль такая, ведь данные откуда-то попадают, вот при вставке эти переносы и ставить, дабы потом время не терять.
|
|
V_a_d |
Отправлено: 29.11.2004, 18:52 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 4
|
Re: Konstantine
По-моему, долговато... Можно считать, что данные находятся в строке AnsiString или *char (не суть), т.е. в опереативной памяти — наверное можно обойтись без нагрузки на винчестер.
Re: Gedeon
Текст попадает из файла. При считывании вставлять не целесообразно, так как в дальнейшем проводятся неоднократно такого типа операции (разного рода многочисленные вставки в исходный текст). |
|
AVC |
Отправлено: 30.11.2004, 09:07 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Захватить память под еще одну строку размером = размер_исходной_строки + (int(размер_исходной_строки / 100) + 1) * 2 + 1;
и через *char оперируя memset покрошить. Неужто на это уйдет более 3-х секунд? |
|
Konstantine |
Отправлено: 30.11.2004, 09:14 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
ну если в char*, то создавай новый массим на 1020000 символов и ассемблерными вставками переноси по 100 символов и после них — 0х0D 0x0A... в ассемблере есть операции работы с блоками данных — вот их и используй
сколько выйдет времени не знаю, но ИМХО это самый быстрый способ
|
|
AVC |
Отправлено: 30.11.2004, 09:18 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Вот и мне кажется, что это самый быстрый способ. Всегда так — либо память, либо время |
|
V_a_d |
Отправлено: 30.11.2004, 20:47 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 4
|
Сенкс! Я делаю тоже самое, только использую функцию sprintf() — результат удовлетворяет.
Вопрос: А можно как нибудь с помощью потоков? |
|
Konstantine |
Отправлено: 01.12.2004, 11:23 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
а потоки куда прилепить собрался???
|
|
Boyko |
Отправлено: 01.12.2004, 12:01 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 88
|
QUOTE (Konstantine @ 01/12/2004, 11:25) | а потоки куда прилепить собрался??? |
Думаю что он говорит о TMemoryStream. Можно писать в TMemoryStream и потом SaveToFile(). |
|
V_a_d |
Отправлено: 02.12.2004, 00:30 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 4
|
QUOTE | Можно писать в TMemoryStream и потом SaveToFile(). |
Типа того. |
|