Форум: "Основная";
Текущий архив: 2002.01.17;
Скачать: [xml.tar.bz2];
ВнизНе, ну вообще прикл... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c