Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];

Вниз

Быстро грузить текстовые файлы порядка 10 метров   Найти похожие ветки 

 
Димон   (2004-07-22 15:31) [0]

Как можно очень быстро (или хитро :)) загружать большие текстовые файлы (порядка 10 метров) в мемо или ричедит. Плюс к этому должен быть прогресс бар, отображающий процесс загрузки.
Быстро это примерно за 5-6 сек.
Хитро это как ВордПед, загрузил часть файла, а потом тихонько догружает остальное, а в это время можно прокручивать текст.
Так как это сделать? :)


 
KSergey ©   (2004-07-22 15:32) [1]

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


 
Dima_Delphi ©   (2004-07-22 16:29) [2]

Загружай потоком, из файла в мемо и всё, засинхронизируеш поток с мемо, и всё будет работать!


 
ЮрийК ©   (2004-07-22 16:43) [3]

"засинхронизируеш поток с мемо, и всё будет работать!"
Что понимаем под потоком, и что значит засихронизировать?
Желательно названия используемых для этого функций дать.


 
ИдиотЪ   (2004-07-22 17:05) [4]

ЮрийК ©
смысл в названиях функций, если непонятны первичные основы, причем операционной системы ?


 
ЮрийК ©   (2004-07-22 18:49) [5]

Ладно:
Memo.LoadFromStream(Stream);
А дальше? Или до этого?


 
Димон   (2004-07-22 22:53) [6]

Со Стримом та же херня Мемо или РичЕдит грузит файлы почти мнгновенно, просто они его долго выводят на экран, т.е, я думаю, проблема в самом компоненте. Может кто-то подскажет как переделать Мемо или РичЕдит?
Ну что люди!? Неужто никто не может ничего посоветовать?  :(


 
Dima_Delphi ©   (2004-07-22 23:54) [7]

Что тысобрался в компоненте менять если ты с потоками нешариш???
Поток ето TThread
Есть такой элемент в делфе, можносоздать юнит, класа TThread.
Оттуда загружаеш в мемо как обычно файл, и синхронизируеш добавление в мемо каждой строки с помощью Sinhronize (memo.update); Поток будет неспеша грузитьте файл, а ты в это время можеш с ним начинатьработать! ОК?????


 
GEN++ ©   (2004-07-23 00:11) [8]

А что для TMemo предел в 32К текста уже преодален?
Я как то умудрился засунуть в TMemo 123K - очннь интересную
форму он принял.


 
nikkie ©   (2004-07-23 00:28) [9]

>GEN++
см. EM_LIMITTEXT

Before EM_LIMITTEXT is called, the default limit for the amount of text a user can enter in an edit control is 32,767 characters.

Edit controls on Windows NT/ 2000: For single-line edit controls, the text limit is either 0x7FFFFFFE bytes or the value of the wParam parameter, whichever is smaller. For multiline edit controls, this value is either –1 bytes or the value of the wParam parameter, whichever is smaller.

Edit controls on Windows 95/98: For single-line edit controls, the text limit is either 0x7FFE bytes or the value of the wParam parameter, whichever is smaller. For multiline edit controls, this value is either 0xFFFF bytes or the value of the wParam parameter, whichever is smaller.


 
nikkie ©   (2004-07-23 00:29) [10]

>Dima_Delphi
>Увлечения / хобби
>Програмирование Электроника!
я тебя узнал! ты - профессор Громов!


 
Димон   (2004-07-23 08:22) [11]

"Что тысобрался в компоненте менять если ты с потоками нешариш???"
>Dima_Delphi
Ну хорошо я не шарю поетому-то сюды и полез :)
Раз ты шаришь кинь мне примерчик плиз и я все пойму!


 
Сеня   (2004-07-23 09:27) [12]

BlockRead, а в качестве буфера переменная типа String.
Прежде чем ее использовать установи ее длину SetLength=размеру файла


 
ЮрийК ©   (2004-07-23 10:21) [13]

"BlockRead, а в качестве буфера переменная типа String.
Прежде чем ее использовать установи ее длину SetLength=размеру файла"
И что дальше, неужели String приравнять к RichEdit.Text?


 
Anatoly Podgoretsky ©   (2004-07-23 11:16) [14]

Хорошая мысль


 
Mental_Ray ©   (2004-07-24 15:00) [15]

Спасибо товарищи, помогли называется!! :(


 
Димон   (2004-07-24 15:01) [16]

Я тоже так думаю!


 
Бином Ньютоныч   (2004-07-24 16:27) [17]

А я не согласный!


 
ЮрийК ©   (2004-07-25 11:01) [18]

И так, создаём поток типа TThread, в нём построчно читаем файл, и добавляем в мемо. После добавления каждой строки Sinhronize (memo.update);

procedure TMyThread.Execute;
begin
...
Readln(TextFile, s);
Memo.Add(s);
Sinhronize (memo.update);
...
end;

Так?


 
Polevi ©   (2004-07-25 11:02) [19]

нет, так не надо, пожалуйста


 
ЮрийК ©   (2004-07-25 11:06) [20]

"Polevi ©   (25.07.04 11:02) [19]
нет, так не надо, пожалуйста"

Как надо, приведи пример?


 
Polevi ©   (2004-07-25 11:23) [21]

надо книжки почитать


 
Димон   (2004-07-25 11:31) [22]

Объясните мне, ламерюге необразованному :), получается, что все что выполняется в

procedure TMyThread.Execute;
begin
...
end;

как бы не тормозит, т.е в отдельном потоке, как если бы я засунул это в таймер. Я правильно понял?


 
ЮрийК ©   (2004-07-25 12:01) [23]

"Polevi ©   (25.07.04 11:23) [21]
надо книжки почитать"

Кому и какие?


 
Polevi ©   (2004-07-25 12:39) [24]

> [23] ЮрийК ©   (25.07.04 12:01)
не выеживайтесь юноша, книжки почитать никому не вредно, а вам и подавно, судя по вашим постам


 
Mim1 ©   (2004-07-25 12:50) [25]


> [22] Димон   (25.07.04 11:31)


События таймер выполняются в основоном потоке.


 
Polevi ©   (2004-07-25 14:00) [26]

> [25] Mim1 ©   (25.07.04 12:50)
и вы тоже почитайте


 
Mim1 ©   (2004-07-25 14:26) [27]


> [26] Polevi ©   (25.07.04 14:00)


Читал, читаю и буду читать. :)

А что я разве не прав, обьект ttimer выполняется в потоке отличном от основоного?

Ведь таймер это всего лиш оболока для функционала windows способного посылать сообщения wm_timer созданому этим отектом окну.
Соощения выбираются циклом выборки сообщений основного потока и диспетчеризируюются окну получателю.
Теоритически можно создать таймер в любом потоке, но это отнюдь не означает что любой таемервыполняет обработчики своих событий в дополнительном потоке.

А что конкретно вы мне советуете почитать?
И вообще не выеживайтесь, сообщение [25] я писал не вам а в ответ на [23].
PS Может рассходывать сколько угодно желчи в последующих, скорее всего я ее не увижу так как уезжаю вечером на заслуженый отдых.


 
Паша   (2004-07-25 14:32) [28]

В Memo не влезет больше 32k! О чем вы говорите? Какие 10 метров?!


 
Сеня   (2004-07-25 14:35) [29]

Я сказал BlockRead и переменная String в качестве буфера. И не парьтесь. Потом RichEdit.Text = переменной_буферу. Все грузится, сам проверил. 4 мега за 2-3 секунды. Что еще надо?


 
Mim1 ©   (2004-07-25 14:35) [30]


> [28] Паша   (25.07.04 14:32)


Вопрос был


> Как можно очень быстро (или хитро :)) загружать большие
> текстовые файлы (порядка 10 метров) в мемо или ричедит.


Про ограниечение уже писали в [8]


 
Polevi ©   (2004-07-25 16:58) [31]

> [27] Mim1 ©   (25.07.04 14:26)
>События таймер выполняются в основоном потоке.
ваша фраза ? если знаете что не всегда в основнои - так и пишите


 
Димон   (2004-07-25 21:17) [32]

>Сеня   (25.07.04 14:35) [29]
К сведению:
за 2-3 сек. 4 метра грузятся с помощью RichEdit.Lines.LoadFromFile();  :o)

Ладно, черт с ней с быстрой загрузкой, пусть грузится со стандартной скорость, но чтобы отображался процесс загрузки, например с помощью прогрессбара.


 
Anatoly Podgoretsky ©   (2004-07-25 21:49) [33]

Ну загружай с помощью ReadLn


 
ЮрийК ©   (2004-07-25 22:10) [34]

Итого:

SetLength(s, 10MB);
FileStream.ReadBuf(Pointer(s)^,Length(s));
RichEdit.Text := s;

Так?

А сразу нельзя?
SetLength(RichEdit.Text, 10MB);
FileStream.ReadBuf(Pointer(RichEdit.Text)^,Length(s));


 
ЮрийК ©   (2004-07-25 22:18) [35]

"ЮрийК ©   (25.07.04 12:01) [23]
"Polevi ©   (25.07.04 11:23) [21]
надо книжки почитать"

Кому и какие?

Polevi ©   (25.07.04 12:39) [24]
> [23] ЮрийК ©   (25.07.04 12:01)
не выеживайтесь юноша, книжки почитать никому не вредно, а вам и подавно, судя по вашим постам"

Я не и выёживался.
Ответ "надо книжки почитать" на просьбу привести пример можно понять и так: чтобы привести пример, мне нужно в книжку заглянуть.


 
Polevi ©   (2004-07-26 09:25) [36]

нет, заглянуть не получится если хотите с потоками работать
нужно почитать и понять
а объяснять в каких случаях нужна синхронизация с основным потоком и как не надо использовать Sinchonize мне уже надоело
извините


 
Fay ©   (2004-07-26 09:29) [37]

2Polevi ©   (26.07.04 09:25) [36]
На самом деле пора просто разместить на сайте нормальную статью о потоках. Книг - море. Не все из них "профпригодные". А после прочтения человеку иногда надо только глянуть "как ходят, как сдают", и всё встанет на свои места.
Добрее надо быть, короче.


 
ЮрийК ©   (2004-07-26 14:50) [38]

"Книг - море. Не все из них "профпригодные"."

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


 
Fay ©   (2004-07-26 14:56) [39]

К примеру "Borland Delphi6 руководство разработчика" от Стива Тейксейра и Ксавье Пачеко. На сайте АП есть типа такая же, но ".. Delphi 5".


 
ПсихЪ_дубль   (2004-07-26 16:52) [40]

Удалено модератором
Примечание: Нет это не офтопик, а грубая персональная нападка



Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.036 c
4-1088146499
_student
2004-06-25 10:54
2004.08.08
Как можно сделать индикатор, ну например как в винампе


4-1088268505
Nomolos
2004-06-26 20:48
2004.08.08
Как получить количество физических жестких дисков?


4-1088159210
Stager
2004-06-25 14:26
2004.08.08
Всплывающая подсказка из трея


1-1090614361
Duk
2004-07-24 00:26
2004.08.08
Как сделать так чтоб прогу нельзя было закрыть


1-1090598058
AlexDee
2004-07-23 19:54
2004.08.08
Возведение в "сложную" степень и число "E"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский