Рейтинговые книги
Читем онлайн Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 43 44 45 46 47 48 49 50 51 ... 123

Использование обоих вызовов DbiUseIdleTime и DbiSaveChanges (после каждого обновления записи) излишне и сопровождается необязательными вызовами функций. Если приложение выполняет множественный ввод новых записей или их редактирование в течение небольшого периода времени, рекомендуем осуществлять вызов функции DbiUseIdleTime во время простоя клинта, а вызов DbiSaveChanges после осуществления «пакета» обновлений.

В случае, если в таблице выполняется не слишком много изменений, клиент может использовать вызов DbiSaveChanges после каждого постинга или же «повесить» на таймер вызов DbiUseIdleTime.

Internet 

Форматы 

UUE кодирование

Sergei Dubarev пишет:

Ваши "Советы…" — классная штука. Столько всего вкусного! :-) Со своей стороны хочу предложить несколько тормозной и местами упрощенный, но все же рабочий ;), алгоритм UUE кодирования (см. аттач). Не вершина искусства, но все же… :)

Для того, чтобы ОНО заработало, необходимо создать проект в составе:

Форма (form) — 1 шт. Поле ввода (edit) — 2 шт., используются события OnDblClick. Кнопка (button) — 1 шт., используется событие OnClick. Диалог открытия файла (Open Dialog) — 1 шт. Диалог сохранения файла (Save Dialog) — 1 шт.

Имена файлов будут вводится либо вручную, либо из диалога (double-click на поле ввода edit), причем в edit1.text должно лежать имя входного файла, в edit2.text — выходного. По нажатии кнопки пойдет процесс, который завершится сообщением "DONE."

Всего хорошего.

P.S. Функция toanysys обнаружена в книге "Для чего нужны и как работают персональные ЭВМ" от 1990 г. Там она присутствует в виде программы на BASIC'e.

P.P.S. Для стимулирования фантазии читателей "Советов…" высылаю так же мессагу из эхи, на основе которой я сваял свое чудо.

Файл Unit1.pas

//UUE кодирование

unit Unit1;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ExtDlgs, StdCtrls;

type TForm1 = class(TForm)

 Button1: TButton;

 Edit1: TEdit;

 Edit2: TEdit;

 OpenDialog1: TOpenDialog;

 SaveDialog1: TSaveDialog;

 procedure Edit1DblClick(Sender: TObject);

 procedure Edit2DblClick(Sender: TObject);

 procedure Button1Click(Sender: TObject);

private

  { Private declarations }

public

  { Public declarations }

end;

var Form1: TForm1;

implementation

{$R *.DFM}

const

 ssz = (High(Cardinal) - $F) div sizeof(byte);//эта константа используется при выделении памяти

 p: string = '0123456789ABCDEF';//эта константа используется функцией toanysys

//выбор входного файла

procedure TForm1.Edit1DblClick(Sender: TObject);

begin

 if opendialog1.execute then edit1.text:= opendialog1.filename;

end;

//выбор выходного (UUE) файла

procedure TForm1.Edit2DblClick(Sender: TObject);

begin

 if savedialog1.execute then edit2.text:= savedialog1.filename;

end;

//выделение подстроки

function mid(s: string; fromc, toc: byte): string;

var

 s1: string;

 i : byte;

begin

 s1:= '';

 for i:= fromc to toc do s1:= s1+s[i];

 mid:= s1;

end;

//перевод числа (a) из десятичной системы в другую

//с основанием (r)

function toanysys(a, r: byte): string;

var

 s, k : string;

 n,m,i : byte;

begin

 s:='';

 m:= 1;

 while m<>0 do begin

  m:= a div r;

  n:= a-m*r+1;

  k:= p[n];

  s:= k+s;

  a:= m;

 end;

 //добавляет незначащие нули

 for i:=1 to 8-length(s) do s:='0'+s;

 toanysys:= s;

end;

//перевод 6-разрядного числа из двоичной системы в десятичную

//двоичное число подставляется в виде строки символов

function frombin(s: string): byte;

var i, e, b: byte;

begin

 b:= 0;

 for i:=1 to 6 do begin

  e:= 1 shl (6-i);

  if s[i]='1' then b:= b+e;

 end;

 frombin:= b;

end;

//непосредственно кодирование

type tcoola = array [1..1] of byte;

pcoola = ^tcoola;

procedure TForm1.Button1Click(Sender: TObject);

var

 inf: file of byte;

 ouf: textfile;

 uue: pcoola;

 b  : array[1..4] of byte;

 bin,t  : string;

 szf,oum,szl,szh,sxl,sxh,i, j  : longint;

begin

 {$I-}

 assignfile(inf, edit1.text); //входной файл

 reset(inf);

 szf:= filesize(inf);    //

 szh:= (szf*8) div 6;    //

 if szf*8-szh*6 = 0 then szl:= 0

 else szl:= 1;      //

 getmem(uue, szh+szl); //выделение памяти

 oum:= 1;

 while not(eof(inf)) do begin

  b[1]:= 0;

  b[2]:= 0;

  b[3]:= 0;

  b[4]:= 0;

  //чтение должно быть сделано посложнее,

  //дабы избежать "read beyond end of file"

  read(inf, b[1], b[2], b[3]);

  //читаем 3 байта из входного файла

  //и формируем "двоичную" строку

  bin:= toanysys(b[1],2)+toanysys(b[2],2)+toanysys(b[3],2);

  //разбиваем строку на куски по 6 бит и добавляем 32

  t:= mid(bin, 19, 24);

  b[4]:= frombin(t)+32;

  t:=mid(bin, 13, 18);

  b[3]:= frombin(t)+32;

  t:= mid(bin, 07, 12);

  b[2]:= frombin(t)+32;

  t:= mid(bin, 01, 06);

  b[1]:= frombin(t)+32;

  //запихиваем полученнные байты во временный массив

  uue[oum]:= b[1];

  oum:= oum+1;

  uue[oum]:= b[2];

  oum:= oum+1;

  uue[oum]:= b[3];

  oum:= oum+1;

  uue[oum]:= b[4];

  oum:= oum+1;

 end;

 //входной файл больше не нужен - закрываем его

 closefile(inf);

 //формируем выходной файл

 assignfile(ouf, edit2.text); //выходной файл

 rewrite(ouf);

 oum:= 1;

 sxh:= (szh+szl) div 60; //число строк в UUE файле

 sxl:= (szh+szl)-sxh*60;

 //заголовок UUE-файла

 writeln(ouf, 'begin 644 '+extractfilename(edit1.text));

 //записываем строки в файл

 for i:=1 to sxh do begin

  write(ouf, 'M');

  // 'M' значит, что в строке 60 символов

  for j:= 1 to 60 do begin

   write(ouf, chr(uue[oum]));

   oum:= oum+1;

  end;

  writeln(ouf);

 end;

 //записываем последнюю строку, которая//обычно короче 60 символов

 sxh:= (sxl*6) div 8;

 write(ouf, chr(sxh+32));

 for i:= 1 to sxl do begin

  write(ouf, chr(uue[oum]));

  oum:= oum+1;

 end;

 // "добиваем" строку незначащими символами

 for i:= sxl+1 to 60 do write(ouf, '`');

 //записываем последние строки файла

 writeln(ouf);

 writeln(ouf, '`');

 writeln(ouf, 'end');

 closefile(ouf);

 freemem(uue, szh+szl);

 //освобождаем память

 showmessage('DONE.'); //Готово. Забирайте!

end;

end.

Из FIDO-переписки:

- New auto-created HomeNet area (555:172/89.2) ------------- HOME.PROGRAMMERS -

 Msg : 34 of 35

 From : Philip Bondarovich 555:172/445.43 Пнд 17 Янв 00 02:51

 To : Denis Guravski Втp 18 Янв 00 22:21

 Subj : UUE

-------------------------------------------------------------------------------

 Wednesday January 12 2000 22:56, Denis Guravski писал All:

 DG> Люди , сpочно нyжно описание сабжа .

=== Begin uuecode ===

- INT.PROGRAMMERS (256:172/43) ------------------------------ INT.PROGRAMMERS -

 Msg : 38 of 38 -36 Scn

 From : Monk 256:172/10 15 Jan 00 18:24:30

 To : Nikolay Severikov 16 Jan 00 03:47:50

 Subj : UU-code

-------------------------------------------------------------------------------

 Жывi сабе памаленькy, /_*Nikolay*_/!

У чацьвэp Стyдзеня 13 2000 y 23:25, цёмнай ночкаю, Nikolay Severikov тайна пiсаў All, i я ўцягнyўся...

1 ... 43 44 45 46 47 48 49 50 51 ... 123
На этой странице вы можете бесплатно читать книгу Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров бесплатно.

Оставить комментарий