Dosęp do zmiennej

0

Witam!

Mam dość nietypowe pytanie.
Potrzebował bym napisać procedurę która jako parametr przyjmowała by stringa, oraz wartość liczbową, a potem do zmiennej o nazwie takiej jak podany string wpisywała drugi parametr - wartość liczbową.
W programie miałbym np kilka zmiennych, nazwijmy je

z1, z2, z3, z4 : integer;

procedura miała by mieć postać w stylu:

procedure przypisz(nazwa_zmiennej : string, wartosc : integer)
begin
nazwa_zmiennej := wartosc;
end;

teraz w jakimś miejscu wywołałbym ją w ten sposób:

przypisz( 'z1', 12 );

i docelowo procedura miała by przypisać do zmiennej z1 wartość 12.

Oczywiście w procedurze mogłbym zrobić IF'y

if nazwa_zmiennej = 'z1' then z1 := wartosc;

ale nie jest to zbyt elastyczne rozwiązanie.

Czy któryś z Kolegów dał by mi może wskazówkę jak zrealizować tają procedurę na innej zasadzie?

Chodzi mi o taki odpowiednik $$ z php

$zmienna = "cos";
$cos = "aaa";

$$zmienna = "nic";
echo $cos;

Po wypisanie $cos otrzymamy "nic".

0

nie da sie tak, poza tym, to troche bez sensu...
tzn jesli masz tylko kilka zmiennych no to mozesz uzyc Case i w zaleznosi od tego co jest w stringu przypisywac wartosc do odpowiedniej zmiennej.

ale zamiast deklarowac kilka zmiennych o nazwach "z1, z2, z3..." lepiej uzyj tablicy. i potem to juz latwo sie odwolac do danego elementu. np dajesz tablice "z" a potem tylko

z[StrToInt(string_z_nazwa)]
0

Da się, ale tylko w przypadku właściwości czy też pól klas, które są opublikowane (klauzula published). Wtedy można wykorzystać RTTI. Jeśli chodzi o zmienne lokalne czy też inne typy danych - nie znam takiej metody. Zobacz w artykułach "Dynamiczne ustawianie właściwości".

0

A może wystarczyło by Ci coś takiego jak TStringList'a. Ona oprócz tego że może przechowywać liste stringów, może też je przechowywać w postaci nazwa=wartosc, i przypisanie jest b. proste:
list.values['asdf'] := 'coś tam'; // mniej wiecej

Oczywiście jest to zgoła co innego niż to o co pytasz, ale może nie ma konieczności używania RTTI - zależy od Twojej potrzeby.

1 użytkowników online, w tym zalogowanych: 0, gości: 1