Variabili dinamiche

Ciao a tutti,

sto processando riga per riga un file CVS.

uno dei campi della riga e’ un identificativo univoco che mi indentifica
il “proprietario” di quella riga.

a priori non so quanti “proprietari” ci sono nel file .

come posso fare a creare delle nuove variabili in cui registrare dei
cumulativi in runtime ?

L’idea che mi era venuta era semplicemente di nominare la variabili con
una concatenazione tra una stringa fissa ed il nome del proprietario ,
in modo che automaticamente i valori fossero registrati nella casella
giusta.

in questo modo devo solo tenere traccia in un array di quanti differenti
proprietari esistono per poi accedere alle variabili direttamente.

Vi sembra una strada fattibile ?

-----------ESEMPIO-----------------------

lara,10,2,11
marco,20,4,5
gigi,30,40,20
lara,20,30,11

cumulativo_1_lara=30
cumulativo_2_lara=32
cumulativo_3_lara=22

cumulativo_1_marco=20
etc


quello che mi interessa e’ sapere se e’ possibile fare delle variabili
con nomi dinamici in modo che a runtime se nel file c’e’ un nuovo
“proprieatario” vengano create al volo le variabili giuste

Il modo più semplice è creare un Hash, usare i nomi delle persone come
chiavi dell’hash e nel valore corrispondente ad ogni persona tieni il
conto del suo cumulativo.

questo pero’ obbliga a fare un sacco di operazioni , tutte le volte che
leggi un “proprietario” devi controllare in tutto l’ hash se esiste gia’
, se non esiste devi aggiungerlo, cosa che invece creando al volo le
variabili con il nome del proprietario non devi fare perche’ se l’hai
gia’ usata contiene gia’ un valore , se non l’hai mai usata contiene
zero

Sono poche righe e una sola struttura dati, contro probabilmente poche
righe e forse centinaia di variabili di cui tra l’altro non conosci a
priori il nome e quindi poi non sai neppure come ispezionare. Finisce
che ti serve un hash per tenerne traccia ed iterarvi. È un approccio che
in trent’anni non ho mai visto usare in linguaggi dinamici. In quelli
statici ovviamente non ci si pensa neppure.

Sono sicuro però che con la metaprogrammabile di Ruby in qualche modo si
può costruire il nome di una variabile. Di sicuro si possono creare
attributi in un oggetto. Se pensi a come si implementano in C un hash,
la struttura dati di un oggetto e l’elenco delle variabili, vedrai che
non c’è molta differenza. E Ruby è scritto in C.

Ti invito a provare entrambe le implementazioni e poi giudica ti quale
sia la più pratica.