Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];

Вниз

В качестве индексов - стринги.   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
6-93157
Undert
2002-09-23 00:04
2002.11.28
YO! Какой формат ...


3-92901
АнКа
2002-11-08 15:13
2002.11.28
Печать JPEG


1-93075
LongIsland
2002-11-15 16:06
2002.11.28
Размеры рисунка в TImage


1-93084
LongIsland
2002-11-16 18:31
2002.11.28
Фокус


1-93119
Tano
2002-11-16 12:26
2002.11.28
Физическое расположение STRING в памяти





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский