![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
драсте
мне захотелось написать что то типа упращеного аналога батника вот сделал Код:
function Cod(var s : string) : string;
var i : integer;
begin
i := Pos(' ',s);
if i = 0 then
begin
Cod := s;
s := ''
end
else
begin
Cod := Copy(s, 1, i - 1);
Delete(s,1,i);
end
end;
procedure Comand(s : string);
var
c : string;
i : integer;
begin
c := Cod(s);
i := AnsiIndexStr(c,kom); // порядок команд в списке
case i of // выбор команды
0: WinExec(pchar(s),SW_Show); // запускающая програма
1: Kozna.Vivod.Caption := s;
2: dely(s);
{3: }
end;
end;
procedure TKozna.FormCreate(Sender: TObject);
var
s : string;
i : integer;
begin
For i := 0 to Zadan.Lines.Count - 1 do
begin
s := Zadan.Lines[i]; //берем очередную строку
Comand(s);
end;
end;без переменых трудно хотелось узнать как создавать переменые |
|
#2
|
|||
|
|||
|
Заводишь Dictionary, а лучше всего Map.
При нахождении присвоения переменной заносишь ее имя и значение в этот map. При нахождении использования переменной - вставляешь значение из map'а. |
|
#3
|
|||
|
|||
|
чет не приходит мне что такое Dictionary или Map
переводчик че то не родил у меня мысли а в голове крутиться примерно такое Код:
type
TUltr = record
mn : string; имя переменой
znach : string; значение переменной
end;
var
per : array of TUltr; список переменных
ai : integer; количество переменых
at : integer; зарезервировано под переменые
begin
SetLength(per, at); а переменная должны начинаться со специального символа ну например "#" Последний раз редактировалось SKIPtr, 03.01.2020 в 03:44. |
|
#4
|
|||
|
|||
|
ну сделай как в bash.
присвоение определяется наличием символа '=', а использование наличием префикса '$'. Код:
myvar=aaa echo $myvar |
|
#5
|
|||
|
|||
|
не-е
проще делать при обязательном наличии оператора например Код:
Set myvar=aaa а там первое слово оператор а уже оператор Set разбереться с командой myvar=aaa |
|
#6
|
|||
|
|||
|
А вообще, есть такой чувак, Антелер, у него есть генератор АСТ дерева для создания языков программирования. Кстати, для Delphi/Pascal у него генератор тоже есть.
|
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
SKIPtr (04.01.2020)
| ||
|
#7
|
|||
|
|||
|
Цитата:
а то тут какие то слова не русские и не понятные |
|
#8
|
|||
|
|||
|
Ну, простая реализация примерно такая (с учетои работы в Delphi 7):
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TVariables = class
private
FItems : TStringList;
FCaseSensitive : Boolean;
function GetItem(VarName: String): String;
procedure SetItem(VarName: String; const Value: String);
public
constructor Create;
destructor Destroy; override;
property Items[VarName : String] : String read GetItem write SetItem;
end;
TForm1 = class(TForm)
edVarList: TMemo;
btSet: TButton;
edVarName: TEdit;
edVarValue: TEdit;
btGet: TButton;
procedure btSetClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btGetClick(Sender: TObject);
private
{ Private declarations }
V : TVariables;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TVariables }
constructor TVariables.Create;
begin
inherited Create;
FItems := TStringList.Create;
end;
destructor TVariables.Destroy;
begin
FItems.Free;
inherited;
end;
function TVariables.GetItem(VarName: String): String;
begin
Result := FItems.Values[VarName];
end;
procedure TVariables.SetItem(VarName: String; const Value: String);
begin
FITems.Values[VarName] := Value;
end;
procedure TForm1.btSetClick(Sender: TObject);
begin
V.Items[edVarName.Text] := edVarValue.Text;
edVarList.Lines.Text := V.FItems.Text;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
V := TVariables.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
V.Free;
end;
procedure TForm1.btGetClick(Sender: TObject);
begin
edVarValue.Text := V.Items[edVarName.Text];
edVarList.Lines.Text := V.FItems.Text;
end;
end. |