Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 1114
от 07.04.2008, 13:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 448, Экспертов: 59
В номере:Вопросов: 4, Ответов: 6

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 130050: Добрый день, Эксперты! Прошу помощи. Нужен алгоритм поиска в произвольном файле 4-х байт. Объясняю подробней: Есть файл(сэйв игры), который постоянно растет. Состоит он из блоков(записей) разных структур. Заголовок нужной мне записи ...
Вопрос № 130131: Добрый вечер! Вот возник вопросик необходимо написать программу, которая показывала текст и рисунки с форматированием. Нашел компонент http://www.trichedit.com/features/, но он 30 дней работает, может кто может помочь? Заранее благадарен....
Вопрос № 130133: Здравствуйте. Я пытаюсь перейти на библиотеку KOL. Если есть эксперты, кто с ней работал, вопрос к ним. Работаю из Delphi 7. Возникли 2 вопроса: 1. У меня на TabControl лежит Panel и Splitter. У обоих Align=caLeft. При этом Splitter всегда выравн...
Вопрос № 130148: такой вопрос приходит строка в ввиде string ;23;23;432;5434;545;34;5;54 вот сам вопрос как ее расшифровать тоесть после расшифровка чтоб она выглядела так a:=23 b:=23 c:=432 . как это сделать не представляю, сделал по мелочи но алгоритм получился...

Вопрос № 130.050
Добрый день, Эксперты!
Прошу помощи. Нужен алгоритм поиска в произвольном файле 4-х байт.

Объясняю подробней:
Есть файл(сэйв игры), который постоянно растет. Состоит он из блоков(записей) разных структур. Заголовок нужной мне записи я знаю. Структуру знаю, но длина постоянно меняется. Начинается он всегда с 4-х байт. Для открытия и чтения файла использую TFileStream. Так вот, есть ли какой алгоритм поиска в файле по байтам, как это реализовано в WinHex ? Если просто перебирать байты, то это очень и очень долго, тем более сэйв постоянно растет.

Т.е. находить то я нахожу нужную мне последовательность байтов, но в файле 30 Мб на это уходит минут 5-10, что сами понимаете... Есть интересные варианты алгоритмов поиска подстроки в строке. Тот же самый алгоритм Бойера-Мура, но не знаю как его применить.

Мне нужно находить 4 байта, т.е. DWORD. Сейчас в голове крутится один вариант в лоб. В памяти делаем временный массив(таблицу) допустим длиной 32 кб , куда считываем блоки, а дальше сканируем 1-4 байт, сравниваем, далее 2-5. Но это тоже будет долго, фактически побайтовое сравнение.

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

Добавлены уточнения.
-----
∙ Отредактировал: Николай Владимирович / Н.В. (Профессор)
∙ Дата редактирования: 01.04.2008, 22:43
Отправлен: 01.04.2008, 14:22
Вопрос задал: svsrus (статус: 8-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: PavelGM
Здравствуйте, svsrus!

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

Второе - почему не сделать буфер в 1-4 Мб - при нынешних размерах памяти это не напрягает, а чтение не будет задерживать (тем более при нынешних размерах кэшах процессоров есть прямой смысл увеличивать буфер, чтобы он был не меньше).

Третье - зачем сравнивать побайтно, когда можно сравнивать словами DWORD при помощи приведения типа, например так DWORD(Addr(p[i])), если p - это буфер. Конечно потери из-за выравнивания будут, но скорее всего не критичные по сравнению с файловыми операциями.

P.S. Алгоритм Бойера-Мура хорош для строк, т.е. "длинных" данных. В вашем случае его использование скорее замедлит процесс.
Ответ отправил: PavelGM (статус: Студент)
Ответ отправлен: 02.04.2008, 10:35
Оценка за ответ: 5
Комментарий оценки:
Спасибо.


Вопрос № 130.131
Добрый вечер!
Вот возник вопросик необходимо написать программу, которая показывала текст и рисунки с форматированием. Нашел компонент http://www.trichedit.com/features/, но он 30 дней работает, может кто может помочь?
Заранее благадарен.
Отправлен: 01.04.2008, 23:56
Вопрос задал: Овчинников Николай Владиславович (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: PavelGM
Здравствуйте, Овчинников Николай Владиславович!

Встроенный в Delphi компонент RichEdit со вкладки Win32. Чем-то не устраивает?

Можно использовать компонент WebBrowser и подсовывать ему сформированный HTML файл.

Еще вариант - импортировать системный ActiveX RichTextBox - он более корректно с RTF работает (один в один как WordPad - это его часть похоже и есть).
Ответ отправил: PavelGM (статус: Студент)
Ответ отправлен: 02.04.2008, 10:46
Оценка за ответ: 5
Комментарий оценки:
я буду пробывать этот вариант!


Вопрос № 130.133
Здравствуйте. Я пытаюсь перейти на библиотеку KOL. Если есть эксперты, кто с ней работал, вопрос к ним. Работаю из Delphi 7. Возникли 2 вопроса:
1. У меня на TabControl лежит Panel и Splitter. У обоих Align=caLeft. При этом Splitter всегда выравнивается по левому краю TabControl, а к нему уже прилипает Panel. Как сделать, чтобы было наоборот. Сначала Panel, а затем Splitter?
2. В качестве таблицы я использую mdvXLGrid. Мне нужно программно заполнить ячейки. При выполнении
Form1.GridL.Cells[1, 1].Text:='Текст';
в модуле KOLmdvXLGrid возникает ошибка (см. приложение)
Как правильно заполнять ячейки?

Приложение:

Отправлен: 02.04.2008, 00:14
Вопрос задал: Хукаленко Дмитрий (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Yakki
Здравствуйте, Хукаленко Дмитрий!
1. Для Splitter сделайте Align=caRight затем Align=caLeft, все.

2. Скорее всего ошибка в модулях (*.dpk, *.bpl) компонента/библиотеки, например плохо скачано, затем архив восстановлен. Переустановите библиотеку.
Ответ отправил: Yakki (статус: 1-ый класс)
Ответ отправлен: 02.04.2008, 10:27
Оценка за ответ: 4
Комментарий оценки:
1. Пробовал: не работает.


Вопрос № 130.148
такой вопрос приходит строка в ввиде string ;23;23;432;5434;545;34;5;54
вот сам вопрос как ее расшифровать тоесть после расшифровка чтоб она выглядела так a:=23 b:=23 c:=432 . как это сделать не представляю, сделал по мелочи но алгоритм получился очень длинный и неустойчивый. помогите если сможете. заранее спасибо.
Отправлен: 02.04.2008, 06:39
Вопрос задал: Doget (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: Овчинников Николай Владиславович
Здравствуйте, Doget!
На форму поместил label-ы, и button.

procedure TForm1.Button1Click(Sender: TObject);
var s: string;
i,p,d:integer;
begin
s:=label1.Caption;
p:=1;
label2.Caption:='';
d:=65; //номер символа A
for i:=1 to length(s) do begin
if s[i]=';' then begin
label2.caption:=label2.caption+chr(d)+':='+copy(s,p,i-1)+' ';
p:=i+1;
inc(d);
end;
end;
end;

если что не понятно пишите
Ответ отправил: Овчинников Николай Владиславович (статус: 1-ый класс)
Ответ отправлен: 02.04.2008, 08:43

Отвечает: Selya
Здравствуйте, Doget!
Для разбора строки используйте TStrings и его свойства Delimiter и DelimitedText, если разделитель нужно указывать. Если же разделитель - запятая, то используйте CommaText
См.пример:

Приложение:

Ответ отправил: Selya (статус: 10-ый класс)
Ответ отправлен: 02.04.2008, 10:43
Оценка за ответ: 4

Отвечает: Louken
Здравствуйте, Doget!

Принцип таков:
Имеем массив - m, в нем попорядку должны храниться все значения (23;23;432;5434;545;34;5;54), т.е. m[0] = a = 23, ..., m[3] = d = 5434 и т.д. Остается только заполнить массив значениями, это делает процедура ParserString из приложения. Там же показан принцип ее использования.

Приложение:

Ответ отправил: Louken (статус: Студент)
Ответ отправлен: 02.04.2008, 13:33
Оценка за ответ: 3


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

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

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 4.72.8 от 05.04.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное