Как при обращении к переменной типа Record использовать переменную типа String? [Record].[String]
Вот пример: Нужно обратится к определенной Ячейке, но че эт за ячейка знает только Стринг переменная S. Как обратится к Record.Name, если Name записано в S? Record.S? оО
Я пишу что то типо базы... (Естественно от нече делать ) так вот там был массив на каждый объект есть свое место в матрице типа интегер, (Собственно 1й список это номера объектов, 2й это разные значения и суммы относящиеся к ниму) Но мне понадобились еще значения типов Реал и стринг... Вотя и пытался сделать параллельный список типа Рекорд куда записывал все переменные выпадающие из типа Интегер...
Добавлено через 46 секунд
А плагинами я вообще пользоватся не умею (У меня их в 3.1.8 вообще нет )
Добавлено через 1 час 5 минут
Кто-нить бросит описание тстринг?
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
var
i,j,k:integer;
NameOID: TStringList;
NameX: TStringList;
procedure Init; //Вызывается при включении скриптаbegin
NameOID :=TStringList.Create;
NameX :=TStringList.Create;
for i:=1to10dobegin
j:=10-i;
k:=10*i;
SetValueOID(inttostr(i),inttostr(j)); //для примера - в один список сохраняю i=j (строки)
SetValueX(inttostr(i),inttostr(k));//тут сохраняю i=kend;
end;
procedure Free; //Вызывается при выключении скриптаbegin
NameOID.savetofile('1.txt'); //сохранение баз в файл при выключении скрипта.
NameX.savetofile('2.txt');
NameOID.free;
NameX.free;
end;
procedure SetValueOID(ValName: string; Value: string);
begin
NameOID.Values[ValName]:=Value;
end;
function GetValueOID(ValName: string): string;
begin
result:=NameOID.Values[ValName];
end;
procedure SetValueX(ValName: string; Value: string);
begin
NameX.Values[ValName]:=Value;
end;
function GetValueX(ValName: string): string;
begin
result:=NameX.Values[ValName];
end;
//основная часть скрипта//вызывается при приходе каждого пакета если скрипт включенbeginend.
- создается два списка, в одном храни (имя=оид) в другом (имя=Х) - только учитывай что Х - будет стринг - надо переводить как будет необходимо...Сохранение в файл - необязательно.
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 16.12.2010 в 15:52.
Вобщем так, TstringList - это список строк, наподобие <Имя>=<Строка>, и имя и строка - это, ессно, string;
Как вариант можно сделать примерно вот так: Оффтоп
delphi Код:
Base:TStringList;
.......................................
Base :=TStringList.Create;
.......................................
procedure SetValueBase(ValName: string; Value: string);
begin
Base.Values[ValName]:=Value;
end;
function GetValueBase(ValName: string): string;
begin
result:=Base.Values[ValName];
end;
........................................
ну и гдето в теле скрипта уже работаешь со списком:
(например ведем базу ников+оид+координаты этого перса)if fromserver and(pck=charinfo)thenbegin
NameX:=ReadD(a);
NameY:=ReadD(b);
NameZ:=ReadD(c);
NameOID:=ReadD(y);// порядок считывания на память написан, может неверно быть
Name:=ReadS(x);
SetValue(Name,inttostr(NameOID));
SetValue(Name+'_cX',inttostr(NameX));
SetValue(Name+'_cY',inttostr(NameY));
SetValue(Name+'_cZ',inttostr(NameZ));
end;
...........................................................
когда понадобится считывание то читаешь со списка так:
Name:='Ник';
NameOID:=strtoint(GetValue(name));
NameX:=strtoint(GetValue(name+'_cX'));
NameY:=strtoint(GetValue(name+'_cY'));
NameZ:=strtoint(GetValue(name+'_cZ'));
Будет вестись одна база, со строками вида
Ник=ОИД
Ник_сХ=(координатаХ)
Ник_сY=(координатаY)
Ник_сZ=(координатаZ)
Пример - гипотетический, вести подобного рода бд будет удобнее не через ник, как написано выше, а через ОИД персов.
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 16.12.2010 в 21:45.
С такой системой есть одно неудобство... Если берем массив типа ТстрингЛист то получим куй прийдется записывать в имя N Например так:
Код:
SetValue(Name+'_'+inttostr(i),inttostr(NameX));
И обращатся так же прийдется:
Код:
NameX:=strtoint(GetValue(name+'_'+inttostr(f)));
Добавлено через 27 минут
Нет я был не прав)) Начал писать отдельный скрипт для проверки функции и понял что там легко к переменным из массива обращения делать...
Constmax=90;
Name='lol';
Var
C:array[1..max] ofTStringList;
start:boolean;
i:integerr;
procedure init;
begin
i:=1;
end;
//.......................procedure SendMsc(msc:string); //Шаблон отправки системных сообщенийbegin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
//.......................procedure SetValue(i:integerr; ValName: string; Value: string);
begin
C[i].Values[ValName]:=Value;
end;
function GetValue(i:integerr; ValName: string): string;
begin
result:=C[i].Values[ValName];
end;
procedure Free;
var i,j:integer;
beginfor i:=1tomaxdo
C[i].free;
end;
//.......................beginif FromClient and start thenbegin
C[i]:=TStringList.Create;
SetValue(i, Name, pck[1]);
if i=maxthen start:=false;
SendMsc(GetValue(i, Name));
inc(i);
end;
end.
Сейчас буду тестить этот скрипт, если норм все буит (Ну или когда все исправлю, что не норм) буду менять свой скрипт...
Breadfan, Спасибо.
Добавлено через 12 минут
Тееекс гдет ошибка в приеме или уже отправке пакета мб проблема с гет и сет валуе... pck[1] Это ведь стринг верно? Тогда в чем оО
Добавлено через 12 минут
Пле про криейт забыл Т_Т
Добавлено через 9 минут
Все робит но пишет не в 16ти ричной, а буквы и иероглифы))