Sites of the week

ads ads ads ads

Delphi: TThread

Posted by admin | Delphi, Процессы и потоки | Четверг 23 Август 2007 07:02

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

далее...

Delphi: Автоматическое определение кодировки текста

Posted by admin | Delphi, Алгоритмы | Среда 22 Август 2007 00:20

Автоматическое определения кодировки текста Методом таблицы модельных распределений:

 
type
TCodePage = (cpWin1251, cp866, cpKOI8R);
PMap = ^TMap;
TMap = array[#$80..#$FF] of Char;
 
function GetMap(CP: TCodePage): PMap;
{ должна возвращать указатель на таблицу перекодировки из CP в Windows1251
(nil для CP = cpWin1251) }
begin
GetMap := nil;
end;
 
function DetermineRussian(Buf: PChar; Count: Integer): TCodePage;
const
ModelBigrams: array[0..33, 0..33] of Byte = (
{АБВГДЕЖЗИЙКЛМHОПРСТУФХЦЧШЩЪЫЬЭЮЯ_?}
{А}(0, 20, 44, 12, 22, 23, 16, 60, 4, 9, 63, 93, 47, 110, 0, 16, 35, 61, 81,
1, 5, 13, 24, 17, 12, 4, 0, 0, 0, 0, 14, 31, 205, 1),
{Б}(19, 0, 0, 0, 4, 19, 0, 0, 8, 0, 2, 15, 1, 4, 41, 0, 15, 5, 0, 15, 0, 2,
1, 0, 0, 6, 16, 37, 0, 0, 0, 4, 3, 0),
{В}(97, 0, 1, 0, 2, 57, 0, 5, 40, 0, 4, 25, 2, 23, 78, 2, 8, 28, 4, 12, 0,
1, 0, 0, 8, 1, 0, 40, 1, 0, 0, 5, 106, 3),
{Г}(13, 0, 0, 0, 9, 5, 0, 0, 15, 0, 1, 17, 1, 2, 96, 0, 24, 0, 0, 7, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0),
{Д}(63, 0, 9, 1, 2, 71, 1, 0, 35, 0, 3, 16, 2, 22, 50, 2, 19, 9, 2, 25, 0,
2, 1, 0, 1, 0, 1, 9, 4, 0, 1, 5, 17, 4),
{Е}(4, 14, 15, 34, 56, 22, 13, 14, 2, 34, 39, 77, 73, 150, 6, 9, 101, 64,
81, 1, 0, 15, 5, 12, 10, 6, 0, 0, 0, 0, 3, 4, 235, 1),
{Ж}(13, 0, 0, 0, 12, 47, 0, 0, 16, 0, 1, 0, 0, 23, 0, 0, 0, 0, 0, 3, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2),
{З}(76, 2, 11, 3, 11, 4, 1, 0, 7, 0, 2, 4, 11, 24, 17, 0, 6, 1, 0, 8, 0, 0,
0, 0, 0, 0, 0, 16, 6, 0, 1, 4, 17, 0),
{И}(7, 9, 32, 5, 18, 60, 4, 42, 31, 27, 28, 46, 55, 49, 12, 7, 26, 60, 53,
0, 5, 25, 14, 28, 4, 1, 0, 0, 0, 0, 9, 56, 255, 0),
{Й}(0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 3, 0, 3, 0, 0, 0, 10, 3, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 0, 122, 0),
{К}(92, 0, 3, 0, 0, 7, 2, 1, 39, 0, 0, 27, 0, 14, 110, 0, 18, 5, 35, 18, 0,
0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0),
{Л}(85, 1, 0, 2, 1, 70, 6, 0, 85, 0, 5, 3, 0, 9, 67, 1, 0, 9, 0, 15, 0, 0,
0, 2, 0, 0, 0, 9, 66, 0, 15, 43, 57, 4),
{М}(44, 0, 0, 0, 0, 65, 0, 0, 47, 0, 1, 1, 10, 15, 57, 7, 0, 2, 0, 24, 0, 0,
0, 0, 0, 0, 0, 28, 0, 0, 0, 8, 109, 3),
{}(139, 0, 0, 1, 11, 108, 0, 4, 152, 0, 7, 0, 1, 69, 161, 0, 0, 8, 25, 24,
5, 1, 5, 2, 0, 1, 0, 83, 10, 0, 1, 29, 38, 5),
{О}(0, 72, 139, 76, 74, 32, 32, 19, 12, 52, 21, 93, 68, 72, 7, 34, 93, 102,
98, 1, 2, 6, 6, 19, 15, 2, 0, 0, 0, 1, 4, 9, 252, 2),
{П}(17, 0, 0, 0, 0, 43, 0, 0, 14, 0, 1, 9, 0, 1, 125, 3, 120, 1, 2, 8, 0, 0,
0, 0, 0, 0, 0, 3, 6, 0, 0, 3, 2, 2),
{Р}(151, 1, 6, 4, 3, 103, 7, 0, 76, 0, 4, 0, 11, 10, 117, 1, 0, 5, 9, 39, 2,
5, 0, 1, 3, 0, 0, 24, 7, 0, 1, 10, 22, 5),
{С}(24, 1, 21, 0, 3, 39, 0, 0, 33, 0, 56, 41, 11, 15, 58, 30, 5, 30, 183,
16, 0, 4, 1, 4, 1, 0, 0, 8, 25, 0, 1, 50, 41, 2),
{Т}(83, 0, 43, 0, 3, 87, 0, 0, 71, 0, 9, 3, 2, 26, 180, 0, 55, 33, 1, 23, 1,
0, 1, 4, 0, 0, 0, 20, 78, 0, 0, 5, 82, 4),
{У}(3, 6, 7, 14, 19, 8, 13, 6, 0, 1, 13, 15, 10, 7, 0, 12, 17, 16, 19, 0, 1,
3, 0, 12, 5, 8, 0, 0, 0, 0, 22, 1, 65, 0),
{Ф}(4, 0, 0, 0, 0, 4, 0, 0, 11, 0, 0, 1, 0, 0, 9, 0, 3, 0, 0, 4, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 2, 0),
{Х}(9, 0, 2, 0, 0, 2, 0, 0, 5, 0, 0, 1, 0, 5, 26, 0, 4, 1, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 76, 0),
{Ц}(5, 0, 0, 0, 0, 16, 0, 0, 48, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0,
0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0),
{Ч}(30, 0, 0, 0, 0, 52, 0, 0, 23, 0, 3, 1, 0, 14, 1, 0, 0, 0, 36, 5, 0, 0,
0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 2),
{Ш}(13, 0, 0, 0, 0, 28, 0, 0, 17, 0, 4, 4, 0, 4, 3, 0, 0, 0, 1, 3, 0, 0, 0,
0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 1),
{Щ}(6, 0, 0, 0, 0, 23, 0, 0, 16, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1),
{Ъ}(0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 0, 0),
{Ы}(0, 5, 14, 1, 3, 28, 0, 2, 0, 22, 6, 19, 21, 2, 0, 5, 4, 7, 10, 0, 0, 37,
0, 3, 4, 0, 0, 0, 0, 0, 0, 1, 84, 0),
{Ь}(0, 1, 0, 0, 0, 9, 0, 10, 1, 0, 13, 0, 2, 26, 0, 0, 0, 10, 3, 0, 0, 0, 1,
0, 6, 0, 0, 0, 0, 0, 6, 4, 117, 0),
{Э}(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 31, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
{Ю}(0, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 15, 0, 0, 0, 1, 4,
1, 15, 0, 0, 0, 0, 0, 0, 38, 0),
{Я}(0, 0, 9, 2, 7, 10, 3, 19, 0, 0, 1, 6, 7, 8, 0, 0, 2, 6, 19, 0, 0, 3, 5,
1, 0, 3, 0, 0, 0, 0, 5, 2, 177, 0),
{_}(42, 80, 193, 43, 109, 41, 18, 53, 159, 0, 144, 27, 83, 176, 187, 229,
70, 231, 99, 47, 15, 13, 6, 58, 7, 0, 0, 0, 0, 38, 0, 22, 0, 2),
{?}(0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 4, 4, 8, 0, 0, 5, 3, 4, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
{ " рейтинг"  буквы ? условно принимается равным 1/20 от " рейтинга"  буквы E,
если сочетание с участием ? корректно, иначе - 0 }
type
TVariation = array[0..33, 0..33] of Integer;
var
I, J, iC, iPredC, Max: Integer;
C: Char;
CP: TCodePage;
D, MinD, Factor: Double;
AMap: PMap;
PV: ^TVariation;
Vars: array[TCodePage] of TVariation;
begin
DetermineRussian := cpWin1251; { по yмолчанию }
{ вычисление распределений биграмм }
FillChar(Vars, SizeOf(Vars), 0);
for CP := Low(Vars) to High(Vars) do
begin
AMap := GetMap(CP);
PV := @Vars[CP];
iPredC := 32;
for I := 0 to Count - 1 do
begin
C := Buf[I];
iC := 32;
if C > = #128 then
begin
if AMap < > nil then
C := AMap^[C];
if not (C in ['?', '?']) then
begin
C := Chr(Ord(C) and not 32); { 'a'..'я' ->  'А'..'Я' }
if C in ['А'..'Я'] then
iC := Ord(C) - Ord('А');
end
else
iC := 33;
end;
Inc(PV^[iPredC, iC]);
iPredC := iC;
end;
end;
{ вычисление метрики и определение наиболее правдоподобной кодировки }
MinD := 0;
for CP := Low(Vars) to High(Vars) do
begin
PV := @Vars[CP];
PV^[32, 32] := 0;
Max := 1;
for I := 0 to 33 do
for J := 0 to 33 do
if PV^[I, J] > Max then
Max := PV^[I, J];
Factor := 255 / Max; { ноpмализация }
D := 0;
for I := 0 to 33 do
for J := 0 to 33 do
D := D + Abs(PV^[I, J] * Factor - ModelBigrams[I, J]);
if (MinD = 0) or (D < MinD) then
begin
MinD := D;
DetermineRussian := CP;
end;
end;
end;
 
begin
{ тест: слово 'Пример' в разных кодировках (веpоятность ошибок на таких
коpотких текстах высока - в данном слyчае пpосто повезло!) }
writeln(DetermineRussian(#$CF#$F0#$E8#$EC#$E5#$F0, 6) = cpWin1251);
writeln(DetermineRussian(#$8F#$E0#$A8#$AC#$A5#$E0, 6) = cp866);
writeln(DetermineRussian(#$F0#$D2#$C9#$CD#$C5#$D2, 6) = cpKOI8R);
readln;
end.

Delphi: Округляем до сотых

Posted by admin | Delphi, Алгоритмы | Вторник 21 Август 2007 21:22

Пример того как в Delphi можно округлить дробное число до нужного знака.

 
uses Math;
 
// Прибавляешь 0.5 затем округляешь:
 
function RoundMax(Num: real; prec: integer): real;
begin
result := roundto(num + Power(10, prec - 1) * 5, prec);
end;
 
// До сотых соответственно будет:
 
function RoundMax100(Num: real): real;
begin
result := round(num * 100 + 0.5) / 100;
end;

Delphi компоненты для работы с архивами и шифрованием

Posted by admin | Delphi, Компоненты | Среда 8 Август 2007 23:57

Обзор компонентов Delphi для работы с архивами и шифрованием.

далее...

Использование FTP в Unix

Posted by admin | Unix | Среда 8 Август 2007 13:29

Matthew Borowski

 

 

mkb@yahoo.com

Перевод: Александр Ермолаев, SWSoft Pte Ltd.

v0.2, 9 Января 2000

Как использовать ftp клиенты и серверы


 

Содержание
1. Преамбула
1.1. Связь со мной
1.2. Legalities and Distribution
1.3. Авторские права
1.4. История этого документа
2. Об FTP
3. Руководство начинающего по пользованию ftp
3.1. Запуск ftp программы
3.2. Регистрация на FTP сервере
3.3. Режимы передачи файлов
3.4. Навигация и просмотр каталогов
3.5. Загрузка и закачивание файлов
3.6. Запуск команд среды
3.7. Метки hash и tick
3.8. Другие команды ftp
4. Консольные FTP клиенты
4.1. NcFTP
4.2. lukemftp
4.3. lftp
4.4. cftp
4.5. yafc
5. Клиенты для X Window
5.1. gFTP
5.2. WXftp
5.3. LLNL XDIR и XFTP
5.4. guiftp
6. Серверы FTP
6.1. Как работает FTP сервер
6.2. Помощь по FTP серверам
6.2.1. WU-FTPD
6.2.2. ProFTPD

 

далее...

Справочник команд UNIX

Posted by admin | Unix | Четверг 2 Август 2007 06:23

Список наиболее часто используемых команд используемых при администрировании UNIX-серверов.

Перезапуск bind

/etc/init.d/bind9 reload

Справочник будет пополняться

Получить список открытых портов

netstat -tpl

Конфигурирование DNS-сервера BIND

Posted by admin | DNS, Unix | Вторник 31 Июль 2007 15:23

Данное руководство описывает механизмы конфигурирования DNS-сервера BIND 8.х и выше. Рассматриваются не только вопросы настройки сервера, доменных зон, но и ряд функциональных возможностей, повышающих безопасность работы данного сервиса.

далее...

Delphi: Поиск и замена текста в TMemo или RichEdit

Posted by admin | Delphi, Контролы | Пятница 15 Июнь 2007 11:38

 Данный пример реализует диалог поиска и замены текста в компоненте TMemo. Пример можно легко переделать под RichEdit.

 
procedure TMainForm.FindItemClick(Sender: TObject);
begin
FPos:=Memo.SelStart;
FindDialog.FindText:=Memo.SelText;
FindDialog.Position:=Point(MainForm.Left+(MainForm.Width div 3),MainForm.Top);
FindDialog.Options:=FindDialog.Options+[frHideUpDown,frHideWholeWord];
FindDialog.Execute;
end;
procedure TMainForm.FindDialogFind(Sender: TObject);
begin
if frMatchCase in FindDialog.Options then
Memo.SelStart:=Pos(FindDialog.FindText,
Copy(Memo.Lines.Text,FPos+1,
Length(Memo.Lines.Text)))+FPos-1
else
Memo.SelStart:=Pos(AnsiLowerCase(FindDialog.FindText),
AnsiLowerCase(Copy(Memo.Lines.Text,FPos+1,
Length(Memo.Lines.Text))))+FPos-1;
if Memo.SelStart>=FPos then
begin
Memo.SelLength:=Length(FindDialog.FindText);
FPos:=Memo.SelStart+Memo.SelLength+1;
end
else
if Application.MessageBox(PChar('Текст "'+FindDialog.FindText+
'" не найден. Продолжить поиск?'),'Сообщение',
mb_YesNo or mb_IconQuestion)<>mrYes
then FindDialog.CloseDialog;
Memo.SetFocus;
end;
procedure TMainForm.ReplaceItemClick(Sender: TObject);
begin
FPos:=Memo.SelStart;
ReplaceDialog.FindText:=Memo.SelText;
ReplaceDialog.Position:=Point(MainForm.Left+(MainForm.Width div 3),MainForm.Top);
ReplaceDialog.Options:=FindDialog.Options+
[frHideUpDown,frHideWholeWord];
ReplaceDialog.Execute;
end;
procedure TMainForm.ReplaceDialogFind(Sender: TObject);
begin
if frMatchCase in ReplaceDialog.Options then
Memo.SelStart:=Pos(ReplaceDialog.FindText,
Copy(Memo.Lines.Text,FPos+1,
Length(Memo.Lines.Text)))+FPos-1
else
Memo.SelStart:=Pos(AnsiLowerCase(ReplaceDialog.FindText),
AnsiLowerCase(Copy(Memo.Lines.Text,FPos+1,
Length(Memo.Lines.Text))))+FPos-1;
if Memo.SelStart>=FPos then
begin
Memo.SelLength:=Length(ReplaceDialog.FindText);
FPos:=Memo.SelStart+RichEdit.SelLength+1;
end
else
if Application.MessageBox(PChar('Текст "'+ReplaceDialog.FindText+
'" не найден. Продолжить поиск?'),'Сообщение',
mb_YesNo or mb_IconQuestion)<>mrYes
then ReplaceDialog.CloseDialog;
Memo.SetFocus;
end;
procedure TMainForm.ReplaceDialogReplace(Sender: TObject);
begin
if Memo.SelText<>'' then
Memo.SelText:=ReplaceDialog.ReplaceText;
if frReplaceAll in ReplaceDialog.Options then
ReplaceDialogFind(Self);
end;

Создание БД Firebird (.fbd-файл) средствами Delphi

Posted by admin | Delphi, Базы данных | Пятница 15 Июнь 2007 07:25

Данный пример создает .fbd файл (база данных Firebird) средствами Delphi

 
IBDatabase1.DatabaseName := ChangeFileExt(Application.ExeName, '.fdb');
IBDatabase1.Params.Add('USER ''SYSDBA''');
IBDatabase1.Params.Add('PASSWORD ''masterkey''');
IBDatabase1.Params.Add('PAGE_SIZE 4096');
IBDatabase1.Params.Add('DEFAULT CHARACTER SET WIN1250');
IBDatabase1.CreateDatabase;

Delphi: Открыть сайт в Internet Explorer

Posted by admin | Delphi, Internet | Пятница 15 Июнь 2007 01:47

Данный пример показывает как запустить Internet Explorer с открыванием какого-либо URL. Для работы требуется модуль ShellAPI

 
ShellExecute(TForm(Owner).Handle,nil,PChar('http://codesources.net/'), nil, nil,SW_SHOWNORMAL);
Страница 3 из 8«12345678»