Newsgroup: it.comp.lang.visual-basic
Titolo: VS2010 FW4 domanda di un pigro: posso cercare e richiamare le variabili a runtime?

Un esempio
 
in un modulo
Public VAR1 as string ="pippo"
Public VAR2 as string="pluto"
Public VAR3 as integer=10
 
poniamo che io abbia un file con scritto
VAR1="Paperina"
VAR2="Gastone"
Var3=1000
Var4="PRRRRRR"
 
vorrei poter leggere il file e imputare i valori delle variabili che 
esistono!
Però a runtime....
ossia....io non sò PREVENTIVAMENTE se VAR1 esiste....se non c'è...NON 
la valorizzo!
 
per poter fare una funzione
LeggeValore(NomeVariabile as string, Valore as object)
...senza sapere se le variabili esistono....
mi serve una sorta di delegate della variabile...e li mi perdo!
 
non so se mi sono spiegato bene....
 
-- 
----- Italliaaaaa 3227! -----
Mi disturba la morte, è vero. Credo che sia un errore del padreterno. 
Non mi ritengo per niente indispensabile,
ma immaginare il mondo senza di me: che farete da soli?
(Vittorio Alfieri)
 
 

 
 
Dizionari no?
 

 Dizionari no?
 
non seppi se'mì spiegommi abbene?
 
-- 
----- Italliaaaaa 3227! -----
Grembiule nero e fiocco azzurro: per un bambino milanista il primo 
giorno di scuola è un trauma.
(Diego Abatantuono)
 
 

 ossia....io non sò PREVENTIVAMENTE se VAR1 esiste....se non c'è...NON la valorizzo!
 
Se il file è del tipo che mi hai indicato, alla "file INI" per intenderci, hai 2 strade:
 
1-Se sai quali variabili possono esserci ti fai un dizionario (su file, su tabella, come vuoi...) e cerchi quelle variabili nel file.
Se domani aumentano le variabili ti basterà modificare il dizionario.
 
2-Se non sai a priori quali variabili ci saranno, la soluzione è andare di Regex (cerchi variabile e il carattere "=").
Poi i valori letti li metti in un array (o observablecollection o dicrionary...) di Object
 
Però non capisco cosa te ne faresti poi dei dati così raccolti nel caso 2.
 
Nicola

 
 
Puoi usare i dizionari per simulare quello che penso di aver capito vuoi 
fare (LOL):
 
Se hai un file con dentro
VAR1=Valore1
VAR2=Valore2
.

 Il 16/09/2011 19.12, Wodka40° ha scritto:
no mi spiego meglio
 
ho un modulo (lo faccio difficile)
dove dicharo
public Var1 as string="rrrrr"
public var2 as integer=10
 
VORREI scrivere una routine che in pseudo codice
 
for each nomevar in modulo1
    if nomevar=nomelettodafile then
          valorevar=valorevarletto da file
    end if
next
 
NON SO se nel file ci sono coppie (nome valore) esistenti o se il file 
me le valorizzerà tutte!
 
Io sono a questo
tramite reflection dovrei leggere le variabili del modulo e imposatrle 
se la property name è uguale a quella del file.
MA
un modulo è una classe particolare e
Assembly.GetExecutingAssembly.GetType("Module1").GetFields
mi da come valore nothing
 
so di esserci vicino....ma non riesco a fare lo step conclusivo!
 
-- 
----- Italliaaaaa 3227! -----
Ti prego, ti prego, non ci uccidere. Ti prego baby, lo sai che ti amo. 
Non avrei mai voluto lasciarti, non è stata colpa mia. Davvero, sono 
sincero. Quel giorno finì la benzina. Si bucò un pneumatico. Non avevo 
i soldi per il taxi! Il mio smoking non era arrivato in tempo dalla 
tintoria! Era venuto a trovarmi da lontano un amico che non vedevo da 
anni! Qualcuno mi rubò la macchina! Ci fu un terremoto! Una tremenda 
inondazione! Un'invasione di cavallette!
John Belushi [da "Blues Brothers"]
 
 

 so di esserci vicino....ma non riesco a fare lo step conclusivo!
 
Risolto...era una stronzata...mi dimenticavo pezzetti di namespace...mi 
scordo che in fin dei conti è soltanto una stupida macchina e NON 
riesce a capire che mi voglio rivolgere al modulo1 del progetto 
corrente!!!
 
un pezzettino di codice che cambia "al volo" il valore di una 
variabile(senza sapere quale)
 
Dim tvar As Reflection.FieldInfo
        For Each tvar In 
Assembly.GetExecutingAssembly.GetType("VariabiliTest.Module1").GetFields
            Debug.Print(tvar.Name)
            Debug.Print(tvar.FieldType.ToString)
            If tvar.Name = "S1" Then
                tvar.SetValue(tvar, "Plutos")
            End If
        Next
 
-- 
----- Italliaaaaa 3227! -----
Là dove l'uomo scopre un minimo di ordine, immediatamente ne suppone 
troppo.
(Francesco Bacone)
 
 


oops! scusa l'intromissione!
 
anche se non è il caso specifico -per tutti gli amici del ng- si
segnala che la tecnica così implementata *non* consente un'eventuale
protezione del codice (ogni particolare riferimento a fatti e
personaggi è puramente casuale :-) ) ...perchè la modifica a
namespaces, classi, fields ...genera solo...crash!
 
Marcello Cantelmo
www.cantelmosoftware.com
 

 www.%&%&ç°°ï¿œ*ï¿œï¿œ.com
...e guardacaso, ma che coincidenza eh!..... tu vendi un infallibile 
protettore di codice!
per inciso....nessun crash!
...si modifica solo il valore di alcune variabili pubbliche in un 
ambiente controllato...
-- 
----- Italliaaaaa 3227! -----
Il grande maestro di pittura meta-gastro-fisica Luciano Lupoletti in:
David Arlequin
http://www.lupoletti.com/public/lupoletti/09-10-24-12-05-21@David%20Arlequin%20-%20Olio%20su%20tela.jpg
(ROTFL: oddio mi ribalto)

 per inciso....nessun crash!
 
se si cambia il nome a namespace, classi o fields...(refactoring,
obfuscation, ect.) ...*non funziona più niente* ...e di certo non
dipende dai tools infallibili...ma da un erronea implementazione!
 
Marcello Cantelmo
www.cantelmosoftware.com
 

 dipende dai tools infallibili...ma da un erronea implementazione!
 
O per la maiella!
...che versione di Visual Studio hai? di sicuro una versione molto più 
avanzata della mia!
La tua vive di vita propria e fà quello che NON gli dici di fare????
UAO!
 
FAMMI CAPIRE secondo te quello qua sotto è un codice che crasha !
....
For Each tvar In 
Assembly.GetExecutingAssembly.GetType("VariabiliTest.Module1").GetFields
            Debug.Print(tvar.Name)
            Debug.Print(tvar.FieldType.ToString)
            If tvar.Name = "S1" Then
                tvar.SetValue(tvar, "Plutos")
            End If
        Next
.....
 
forse con "ViSaul Studio" e Framework "Beppe"
 
Andem ben....!!!
Salut!
 
p.s.
 
lo sto maltrattando....non crasha!....cavolo!...e crasha che poi il 
cantelmo è felice!!!
Questi programmi moderni: appena vuoi una cosa ne fanno un altra!!!
 
-- 
----- Italliaaaaa 3227! -----


 Questi programmi moderni: appena vuoi una cosa ne fanno un altra!!!
 
macchè! ...tutta colpa del developer...incapace

 macchè! ...tutta colpa del developer...incapace
Può darsi che sia incapace...cerco di migliorare!
in genere quello che posto lo provo...a meno che sia roba che sò a 
memoria perchè la uso e riuso!
 
mi son fatto un progettino winform
Module Module1
    Public A1 As Integer = 100
    Public S1 As String = "Peperinos"
End Module
 
e poi una form con 2 bottoni ed un textbox multiline
 
Imports System.Reflection
Public Class Form1
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click
        'setup da codice come sempre
        Module1.A1 = 222
        Dim tvar As Reflection.FieldInfo
        For Each tvar In 
Assembly.GetExecutingAssembly.GetType("VariabiliTest.Module1").GetFields
            TextBox1.Text = tvar.Name + ":" + 
tvar.GetValue(tvar).ToString + vbCrLf
            Debug.Print(tvar.FieldType.ToString)
            If tvar.Name = "S1" Then
                tvar.SetValue(tvar, "Plutos")
            End If
            If tvar.Name = "A1" Then
                tvar.SetValue(tvar, CInt(1000))
            End If
            TextBox1.Text += "Stampo s1 come una normale string " + S1 
+ vbCrLf
            TextBox1.Text += "Stampo a1 come una normale string " + 
A1.ToString + vbCrLf
        Next
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button2.Click
 
        TextBox1.Text = "All'avvio dell'evento click A1 vale: " + 
A1.ToString + vbCrLf
        For Each tvar In 
Assembly.GetExecutingAssembly.GetType("VariabiliTest.Module1").GetFields
            Debug.Print(tvar.FieldType.ToString)
            If tvar.Name = "A1" Then
                TextBox1.Text += tvar.Name + ":" + 
tvar.GetValue(tvar).ToString + vbCrLf
                tvar.SetValue(tvar, 20)
            End If
        Next
        TextBox1.Text += "A1: " + A1.ToString + vbCrLf
        A1 += 200
        TextBox1.Text += "a1: " + A1.ToString + vbCrLf
    End Sub
 
End Class
 
.....se vuoi ti allego anche le foto....
i valori vengono tranquillamente cambiati e usati!
Sarò un programmatore da poco....può essere....però tutto funziona!!!
 
 
TU, grandissimo programmatore, ti salvi dicendo SE cambi 
namespace...SE...SE...SE...
ma IO NON lo cambio! A che prò???
Perchè ti compro il Goliath? manco morto...le golia le compro al 
Bar!...mi fido di più! Mai accettare caramelle dagli sconosciuti!
 
-- 
----- Italliaaaaa 3227! -----
Anche sul trono più alto del mondo, si sta seduti sul proprio culo.
( Michel de Montaigne )
 
 

 Bar!...mi fido di pi ! Mai accettare caramelle dagli sconosciuti!
 
oops! ...attenzione a non parlare con la bocca piena...che le
caramelle possono scendere di traverso!
 
...anche questa volta ho perso tempo prezioso
 
Marcello Cantelmo
www.cantelmosoftware

 ...e guardacaso, ma che coincidenza eh!..... tu vendi un infallibile protettore di codice!
 
Wodka, credo che ci sia stato un qui pro quo.
Il "ogni particolare riferimento a fatti e personaggi è puramente casuale" credo sia riferito alle discussioni di John e compagnia bella.
Alla fine non ha pubblicizzato nulla. Ha il link al suo sito... ma tutti noi lo abbiamo (o lo abbiamo avuto) al nostro.
Non vedo il motivo di questa incazzatura.
 
 
Nicola
 


Abbi pazienza Marcè....
io sono borioso, inconcludente incapace e tutto quello che vuoi!
 
Però chi posta all'interno del messaggio di un altro per denigrare la 
tecnica perchè VENDE un software che con tale tecnica verrebbe messo in 
crisi
....definiscila tu una persona del genere!
 
dico solo che:
Ad una persona del genere hanno tirato una statuetta del duomo di 
Milano in faccia....
...e i giudici hanno persino assolto il lanciatore!
...non dico altro!
 
capisc....ammè! Marcè non siamo nati ieri!
 
-- 
----- Italliaaaaa 3227! -----
Ho trovato una città di mattoni, ve la restituisco di marmo.
(Imperatore Augusto da Epistole)
 
 

 Il 19/09/2011 14.55, Wodka40° ha scritto:
Il signore pubblicizza ad un prezzo X un software per proteggere il 
codice.
Più di una volta in passato è sceso dall'olimpo della programmazione 
per dirne di cotte e di crude su tutto e su tutti e su quanto fosse 
bravo lui!
Nel farlo pubblicizza il suo codice....e non accetta nessuna 
rimostranza da nessuno! Il suo codice va benissimo tutto il resto è 
noia!
Nel farlo usa il NG come un esperto di marketing appena uscito da 
scuola...e spesso ha anche crosspostato..
Tutto lecito...infatti il ng NON E' moderato!
Però non vedo te o Mauro o GbC pubblicizzare i vostri prodotti....men 
che meno denigrare il codice di altri purche si parli del suo!
Quindi...o siete fessi voi...o è furbo lui (io sono un idiota a sentir 
lui....quindi mi tiro fuori!)
 
Nessun illecito(ci mancherebbe altro)....diciamo solo mancanza di 
sovoir faire....
 
-- 
----- Italliaaaaa 3227! -----
Come ti senti oggi???
 
Giano Geminus Bifrons Bepop Flowers
http://youtu.be/Wk_gyLo0i-c
 
minuto 3:14
 
(Un uomo un mito: Luciano Lupoletti)
 
 

 Marcello Cantelmo ha detto questo lunedì :
ed aggiungo....
che c'azzecca proteggere il codice con sto post?
imho è OT!...parecchio!
 
-- 
----- Italliaaaaa 3227! -----
Verace o finta, è da temersi sempre  pietà di plebe.
(Vittorio Alfieri)
 
 

 credo sia riferito alle discussioni di John e compagnia bella. ZAC
 
c'eri nel "lontano" 2008???
http://it.narkive.com/2008/10/27/2917312-protezione-vb-net-da-decompilazione.html..
..
 
proprio non avevamo da fare un cazzo eh!...ma quanto si scriveva!
ora siamo più impegnati (vedi John)  un vaffanculo ed appresso !!!
:D
 
-- 
----- Italliaaaaa 3227! -----
Era Cecco, il figlio del fornaio; era un orribile butterato napoletano, 
col culo molto basso ed un alito agghiacciante tipo fogna di Calcutta.
(Fantozzi)