Текущий архив: 2002.11.28;
Скачать: CL | DM;
Вниз
В качестве индексов - стринги. Найти похожие ветки
← →
Linder (2002-11-18 11:49) [0]Привет, Уважаемые Мастера!
Такой вопрос:
Необходимо что-бы в массиве в качестве индексов выступали стринги.
На-пример:
mas : array["вася","петя","коля"] of byte;
mas["вася"]:=3;
mas["петя"]:=7;
и так далее.
Как это сделать,
потому что такое обьявление переменной mas как я привел - не проходит. :((
← →
Слесарь Матерящийся (2002-11-18 11:50) [1]TStringList.Values[]
← →
Linder (2002-11-18 11:53) [2]>Слесарь Матерящийся
Такое решение мне не подходит, к сожалению.
← →
Skier (2002-11-18 12:01) [3]>Linder
А почему нужна именно такая конструкция ?
Какая цель ? Что хочешь сделать ?
← →
KoluChi (2002-11-18 12:03) [4]var
mas_str: array [0..X] of String = ("вася","петя","коля"); //лучше все таки TSrings
mas: array [0..X] of byte;
begin
mas[indexOf(""петя"")] := 1; //indexof - поиск в mas_str
end;
← →
Linder (2002-11-18 12:20) [5]Я анализирую некий скрипт.
А1=PAS("некое выражение");
А2=ACT("некое выражение");
А3=REX("некое выражение");
А4=FEX("некое выражение");
где А1..А4 - переменные,
PAS,ACT,REX,FEX - функции, которые что-то делают с неким выражением
я хочу описать процедурный тип:
masF : array["PAS","ACT","REX","FEX"] of procedure;
в разделе INITIALIZATION поприсваивать различные процедуры для обработки различних функции ("PAS","ACT","REX","FEX")
masF["PAS"]:=ProcessPas;
masF["ACT"]:=ProcessAct;
masF["REX"]:=ProcessRex;
masF["FEX"]:=ProcessFex;
---------------------------------------------------------
И теперь, во время обработки скрипта, я буду просто находить функцию ("PAS","ACT","REX","FEX") и просто вызывать её обработку : masF["PAS"] или masF["ACT"] и так далее.
← →
Skier (2002-11-18 12:28) [6]>Linder
А нельзя ли это сделать с помощью перечислимого типа ?
type
TSCRIPT_TYPE = (ST_PAS, ST_ACT, ST_REX, ST_FEX);
//...........
masF : array[TSCRIPT_TYPE] of procedure;
//.............
masF[ST_PAS]:=ProcessPas;
masF[ST_ACT]:=ProcessAct;
masF[ST_REX]:=ProcessRex;
masF[ST_FEX]:=ProcessFex;
← →
Linder (2002-11-18 12:46) [7]>Skier
Перечисляемый тип нельзя, потому что я открываю текстовый файл, который содержит скрипт.
Анализирую это скрипт, выделяю переменную и формулу.
В формуле я выделяю функцию ("PAS","ACT","REX","FEX")
И теперь должен обработать аргумент функции в зависимлсти от того, что это за функция!
Тоисть, я разгребая скрипт (Linder (18.11.02 12:20)) нашел :
перемення - А1;
функция - "PAS".
Эти две вещи записаны у меня в переменные типа String
Var
P : string; //переменная
F : string; //функция
P:="A1";
F:="PAS";
А теперь имея F:="PAS" (стринговая переменная) мне необходимо вызвать процедуру обработчик для функции "PAS".
← →
Linder (2002-11-18 12:49) [8]Похоже пока придется остановиться на варианте
(KoluChi © (18.11.02 12:03))
А потом усовершенствую, если будет время.
← →
Skier (2002-11-18 12:49) [9]>Linder
Тогда сделай что-то похожее на вариант
KoluChi © (18.11.02 12:03)...
← →
PVOzerski (2002-11-18 13:40) [10]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
type
tA=class
private
Vasya,Petya:string;
procedure SetValue(idx:string;const value:string);
function GetValue(idx:string):string;
public
property Value[idx:string]:string read GetValue write SetValue;
end;
implementation
procedure tA.SetValue(idx:string;const value:string);
begin
if idx="ВАСЯ" then
Vasya:=value
else if idx="ПЕТЯ" then
Petya:=value;
end;
function tA.GetValue(idx:string):string;
begin
if idx="ВАСЯ" then
Result:=Vasya
else if idx="ПЕТЯ" then
Result:=Petya;
end;
{$R *.DFM}
var
a:tA;
initialization
a:=tA.Create;
a.Value["ВАСЯ"]:="!!!!";
ShowMessage(a.Value["ВАСЯ"]);
end.
← →
Axis_of_Evil (2002-11-18 13:55) [11]mas[ Ord ("вася")] := 3; ?
← →
KoluChi (2002-11-18 14:25) [12]>Axis_of_Evil © (18.11.02 13:55)
function Ord(X): Longint;
Description
X is an ordinal-type or character-type expression .
← →
Axis_of_Evil (2002-11-18 14:35) [13]2 KoluChi:
Ладно, может облом, но у меня чего-то похожее работало.
Items[Ord(Terrain[x, y])+9].Draw...
где
Terrain: array[0..Map_Size, 0..Map_Size] of TTerrainType;
где
TTerrainType = (DeepWater, Water, Swamp, Dirt1, Dirt2, Dirt3, Dirt4, Hills, Mountain1, Mountain2);
← →
KoluChi (2002-11-18 14:43) [14]>Axis_of_Evil © (18.11.02 14:35)
TTerrainType - перечисление, а не массив строк - большая разница.
← →
Pricol (2002-11-18 15:46) [15]>PVOzerski © (18.11.02 13:40)
Ты бы еще описание проекта вывалил.
Лаконичный ты мой. :)
Страницы: 1 вся ветка
Текущий архив: 2002.11.28;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.007 c