Šta je novo?

string to value?

hwfanatic

Čuven
Učlanjen(a)
13.02.2002
Poruke
659
Poena
630
Da li postoji funkcija koja za string parametar vraca vrednost promenjive tog imena u Delphiju? Nisam odradio search jer nemam pojma sa kojim recima da trazim...
 
Nisam siguran da sam razumeo pitanje...
 
E, ja sam tek sad video poruku, a koliko ja kapiram ti hoces string da transformises u name kontrole...
Ako si na to mislio mislim da nemoze, tj. ja neznam...
 
Ok, ajde da probam ovako:

Program uzima jedan string parametar. Jedan parametar, ali zato puno vrednosti. U programu imamu gomilu konstanti, i parametrima bi dao bas takve iste nazive. E sad, da ja ne bi pravio beskrajne if-ove za svaki parametar posebno, mislio sam da postoji elegantnije resenje...

Znaci negde u programu postoji const nesto, i ta funkcija bi na poziv Funkcija('nesto') vracala vrednost const nesto. Da bi olaksao stvar, nesto je Longword.

Ne bi ja ovo bez veze pitao da nisam ovako nesto vec video negde. Naravno, sad vise ne znam gde... U ostalom, kako rade funkcije koje od stringa naprave matematicku formulu?
 
hwfanatic je napisao(la):
Ok, ajde da probam ovako:

Program uzima jedan string parametar. Jedan parametar, ali zato puno vrednosti. U programu imamu gomilu konstanti, i parametrima bi dao bas takve iste nazive. E sad, da ja ne bi pravio beskrajne if-ove za svaki parametar posebno, mislio sam da postoji elegantnije resenje...

Znaci negde u programu postoji const nesto, i ta funkcija bi na poziv Funkcija('nesto') vracala vrednost const nesto. Da bi olaksao stvar, nesto je Longword.

Ne bi ja ovo bez veze pitao da nisam ovako nesto vec video negde. Naravno, sad vise ne znam gde... U ostalom, kako rade funkcije koje od stringa naprave matematicku formulu?
Mislis na nesto ovako?

const parametri_str : array [0..max] of string = ('blah1', 'blah2', ...);
const parametri_long : array [0..max] of longint = (blah1_vrednost, blah2_vrednost, ... );

function paramstr2long(s: string): longint;
begin
<petlja koja prolazi kroz niz parametri_str i poredi svaki element sa s, ako pronadje ekvivalentan vraca u index>
paramstr2long:=parametri_long[index]
end
 
Moze to i malo jednostavnije koristeci TStringList klasu. Ona sluzi kao osnovna klasa za skladistenje stringova. Medjutim, ova klasa vec ima ugradjen mehanizam za skladistenje i manipulaciju izraza tipa 'lvalue=rvalue' koji se preventivno koristio za recimo INI fajlove.
Dakle, kljucna stvar je znak jednakosti u stringu koji se skladisti; ako ga stringovi pohranjeni imaju, onda mogu da se koriste propertyju "Names" i "Values" koji automatski parsiraju takav string.

Dakle, ako imas sledecu konstrukciju:

[code:1]
MyStringList := TStringList.Create;
MyStringList.CaseSensitive := false;
MyStringList.Duplicates := dupIgnore;
MyStringList.Sorted := false;
MyStringList.Add('Ime=Petar');
MyStringList.Add('Prezime=Petrovic');
MyStringList.Add('Godina=35');
MyStringList.Add('Kosa=plava');
[/code:1]

Mozes sve lvalues prikupiti preko MyStringList.Names[index], rvalues preko lvalues. To znaci sledece:

mystring := MyStringList.Values['Prezime']; // vraca mystring='Petrovic'

ali su takodje moguce i konstrukcije pristupa preko varijabli ili konstanti, npr:

myparam := 'Prezime';
mystring := MyStringList.Values[myparam];

sto vraca kao i prethodni primer -> mystring='Petrovic'
 
Hm... Ni jedno ni drugo resenje nije ono sto sam trazio. Mislim, radi posao, i hvala na odgovoru, naravno, ali nije to to... I povrh toga, druga metoda mi se ne svidja zbog petljanja sa konverzijom iz stringa u word i obrnuto...

Ajde, ustvari, prvo cu da probam, pa cu da javim kako je proslo.
 
Jos jednom hvala, silverglider, radi sasvim prihvatljivo.
 
Nazad
Vrh Dno