Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.013 c
4-93282
sas1
2002-10-15 11:18
2002.11.28
кнопки


1-93095
Maksss
2002-11-16 22:06
2002.11.28
Read-Write File


8-93149
Alex
2002-08-05 17:46
2002.11.28
Графика


1-93055
----
2002-11-19 14:43
2002.11.28
TComObject


3-92906
Kurt
2002-11-10 13:14
2002.11.28
Что означает эта ошибка при попытке обновить таблицу Query BDE