Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.01.17;
Скачать: CL | DM;

Вниз

Не, ну вообще прикл...   Найти похожие ветки 

 
VitHouse ©   (2001-12-27 12:54) [13]

Этот конвертор распознает функции типа:
Монитор("Самсунг","20","АА");
Конвертор заполняет тип TStringFunction, Где в него прописывается имя скриптофункции и массив всех параметров!!!!!
Исходник ниже))



unit FuncConvertor10;
{Распознование функций и процедер
Версия 1.01
VitHouse ® 2001}

interface

type
TStringParams = array of string;
{Структура функции Name - Заголовок/Имя,}

PStringFunction = ^TStringFunction;
TStringFunction = record
Name: string;
Params: array of string;
end;

{Локальные явные функции}
function GetFunction (_Value: string): TStringFunction;
function FuncToStringLine (Func: TStringFunction): string;
function CreateFunction (FuncName: string; Params: array of string): TStringFunction;

{Указательные функции}
{
function GetPFunctionAddr(Value: PChar): Pointer;
function PFuncToPChar(FuncAddr: Pointer): PChar;
function CreateFunctionAddr(FuncName: PChar; Params: array of PCHar): Pointer;
}

implementation {Рутинные функции}

function CreateFunction(FuncName: string; Params: array of string): TStringFunction;
var i: integer;
l: integer;
begin
Result.Name := FuncName;
l := Length(Params);
SetLength(Result.Params, l);
for i := 0 to Length(Params) - 1 do
Result.Params[i] := Params[i];
end;


function GetCharCount(CharFind: char; _Value: string): integer;
var CharCount: integer;
Value: string;
begin
Result := 0;
Value := _Value;
CharCount{Количесво запятых} := 0;
while Pos(CharFind, Value)>0 do begin
delete(Value, Pos(",", Value), 1);
Inc(CharCount);
end;

Result := CharCount;
end;

function GetFunction(_Value: string): TStringFunction;
var Value: string;
ZapCount: Integer;
i: integer;
_Params: array of string;
begin
{
Имя функции до первой скобки (
Параметр начинается с ковычки "
Параметр заканчивается ковычкой "
Следующий параметр через запятую ,
Заканчивается функция скобкой )
}

{Этапы расспознования функции}
Value := _Value;
Result.Name := Copy(Value, 1, Pos("(", Value)-1); //Имя функции

if (Pos("(", Value) = 0) and (Pos(")", Value)=0) then
begin
Result.Name := _Value;
EXIT;
end;

{Определяем кол-во параметров}

ZapCount{Количесво запятых} := GetCharCount(",", Value);


{Если параметров нет, то выход}
if ZapCount = 0 then EXIT;


{Задаем длину массива параметров}
SetLength(Result.Params, ZapCount+1);
//SetLength(Params, ZapCount+1);


{Заполнение массива параметров значениями}

delete(Value, 1, Pos("""", Value)-1);
delete(Value, Pos(")", Value), 1);

for i := 0 to LENGTH(Result.Params) - 1 do
begin
{Поиск значения параметра
Находим первую кавычку и стераем все до нее}

{Убиваем первую кавычку}
delete(Value, POS("""", Value), 1);

{Назначаем значение параметра до следующей ковычки}
Result.Params[i] := COPY(Value, 1, Pos("""", Value)-1) ;//""+inttostr(i);

{Убиваем вторую кавычку}
delete(Value, POS("""", Value), 1);

{Убиваем все до следующей кавычки}
delete(Value, 1, Pos("""", Value)-1);
end;


end;

function FuncToStringLine(Func: TStringFunction): string;
var i: integer;
begin
Result := "";

for i := 0 to LENGTH(Func.Params) - 1 do
if i = LENGTH(Func.Params) - 1 then Result :=Result+ """" + Func.Params[i] + """"
else Result := Result+ """" + Func.Params[i] + """, ";

Result := Func.Name + "(" + Result + ")";

end;

end.



Жду Ваших мнений, господа!



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

Текущий архив: 2002.01.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.009 c
1-52540
vbazik
2001-12-23 16:44
2002.01.17
Графика, вставка с масштабированием


3-52496
Шавлюк Евгений
2001-12-13 00:27
2002.01.17
Использование ClientDataSet


1-52586
Mikhalyov Dmitry
2001-12-27 16:21
2002.01.17
О фреймах


1-52579
Voland
2001-12-28 01:50
2002.01.17
Помогите получить Icon из *.exe в tImageList !!!


14-52644
FLIZ
2001-11-21 18:52
2002.01.17
Где Дельфи5 хранит настройки кнопок меню ?