Чтение онлайн

ЖАНРЫ

Интернет решения от доктора Боба

Swart Bob

Шрифт:

 uses

SysUtils, WinTypes, WinProcs, Classes;

 type

TBDosEnvironment = class(TComponent)

public

{ Public class declarations (override) }

constructor Create(AOwner: TComponent); override;

destructor Destroy; override;

private

{ Private field declarations }

FDosEnvList: TStringList;

protected

{ Protected method declarations }

function GetDosEnvCount: Word;

public

{ Public interface declarations }

function GetDosEnvStr(Const Name: String): String;

{ This function is a modified version of the GetEnvVar function that

appears in the WinDos unit that comes with Delphi. This function's

interface uses Pascal strings instead of null-terminated strings.

}

property DosEnvCount: Word read GetDosEnvCount;

property DosEnvList: TStringList read FDosEnvList;

end;

 implementation

constructor TBDosEnvironment.Create(AOwner: TComponent);

var P: PChar;

i: Integer;

begin

inherited Create(AOwner);

FDosEnvList := TStringList.Create;

{$IFDEF WIN32}

P := GetEnvironmentStrings;

{$ELSE}

P := GetDosEnvironment; { Win API }

{$ENDIF}

i := 0;

while P^ <> #0 do

begin

Inc(i);

FDosEnvList.Add(StrPas(P));

Inc(P, StrLen(P)+1) { Fast Jump to Next Var }

end;

end {Create};

destructor TBDosEnvironment.Destroy;

begin

FDosEnvList.Free;

FDosEnvList := nil;

inherited Destroy

end {Destroy};

function TBDosEnvironment.GetDosEnvCount: Word;

begin

Result := 0;

if Assigned(FDosEnvList) then Result := FDosEnvList.Count

end {GetDosEnvCount};

function TBDosEnvironment.GetDosEnvStr(Const Name: String): String;

var i: Integer;

Tmp: String;

begin

i := 0;

Result := '';

if Assigned(FDosEnvList) then while i <FDosEnvList.Count >do

begin

Tmp := FDosEnvList[i];

Inc(i);

if Pos(Name,Tmp) = 1 then

begin

Delete(Tmp,1,Length(Name));

if Tmp[1] = '=' then

begin

Delete(Tmp,1,1);

Result := Tmp;

i := FDosEnvList.Count { end while-loop }

end

end

end

end {GetDosEnvStr};

 end.

Данный

компонент получает список переменных среды во время своего создания. Свойство DosEnvCount и DosEnvList является свойством только для чтения и поэтому лучше его создавать его в на ходу, а не бросать на форму, так как берется только 'свежий' список переменных среды, а не загружается из .DFM файла).

2.2.4. Анализ

Среди переменных среды есть переменная с именем REQUEST_METHOD. Она должна иметь значение POST для нашего примера (Я не люблю другие методы). Затем мы должны найти размер информации, которая передана нам. Для этого мы должны получить переменную CONTENT_LENGTH. Сама информация поступает к нам через стандартный ввод (без маркера конца файла, поэтому наша задача не пытаться читать больше, чем нам передано). Данные поступающие через стандартный ввод имеют следующую форму FIELD=VALUE и разделяется с помощью символа '&'. Например: AUTHOR="Bob_Swart"&. Поскольку мы имеем весь входной поток, как одну длинную строку, то мы можем быстро найти параметр AUTHOR с помощью следующей функции:

Поделиться с друзьями: