Autore Topic: Contenere in una variabile stringa codice Html (e non solo) da utilizzare  (Letto 872 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Come si sa non è possibile utilizzare un comando Gambas ponendolo in una variabile e richiamando poi quella variabile al suo posto:
Codice: gambas [Seleziona]

Public Sub Button1_Click()

 Dim s As String

  s = "Print"

   s "alibaba"

End

Un codice così concepito dà l'errore: Unexpected string .


Il codice Html, usato all'interno del codice Gambas, invece lo consente:
http://www.gambas-it.org/wiki/index.php/Controlli_e_finestre_che_supportano_il_codice_HTML#Utilizzare_il_codice_Html_contenuto_in_una_variabile_stringa
« Ultima modifica: 02 Ottobre 2012, 18:53:13 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Contenere in una variabile stringa codice Html da utilizzare
« Risposta #1 il: 02 Ottobre 2012, 13:16:27 »
Eval() ???

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Eval() ???

Uhmmm... potrebbe essere interessante.... ma fammi un esempio con il semplice Print, o con altro.  :-\
« Ultima modifica: 02 Ottobre 2012, 18:53:27 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Contenere in una variabile stringa codice Html da utilizzare
« Risposta #3 il: 02 Ottobre 2012, 16:18:38 »
Da quello che ho capito, eval ammette istruzioni fatte con elementi base, logici e/o numerici.
Per le classi, o oggetti, la cosa viene svolta da Object.New(), che ti permette di creare oggetti in runtime, senza che il compilatore ci metta il naso.
E' ovvio che questo metodo non permette operazioni come Eval, ma ha lo stesso scopo, ovvero creare cose in runtime dinamiche.
E' altrettanto ovvio che la cosa necessità di molta attenzione, perchè il controllo lo ha il programma, e non più il compilatore, perchè viene esploso durante l'esecuzione, per cui errori e/o anomalie possono incasinare il programma. Comunque, con alcuni semplici accorgimenti, i problemi si possono evitare...

Per gli esempi, prova a farne qualcuno, non è complicato. Devi solo inserire un'operazione entro una stringa (es. "a=c+2"), il risultato verrà ritornato da eval in una variabile da te definita (es. var=Eval("a=c+2", valori delle variabili a e c)). Vedi help...  :D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Da quello che ho capito, eval ammette istruzioni fatte con elementi base, logici e/o numerici.
Devi solo inserire un'operazione entro una stringa (es. "a=c+2")
Be'... alcune cose le fa, ammettendo istruzioni con elementi base, come hai detto tu. Ammette, inoltre, l'uso anche di alcune istruzioni Gambas (ma, da quel che mi è parso dalle prove, non tutte... bisognerebbe indagare meglio).
Ad esempio:
Codice: gambas [Seleziona]

Public Sub Button1_Click()

  Dim fn As New Collection
  Dim i as Integer
  Dim s As String

   fn["i"] = Pid_finestra_di_un_programma

     s = "Let Desktop.ActiveWindow = i"

       Eval(s, fn)

End

Appunto in questo caso ho usato all'interno di Eval() una variabile stringa contenente una precisa istruzione, e non direttamente l'istruzione medesima.

Una cosa va sottolineata della funzione Eval(): che nella variabile stringa, che tale funzione è capace di utilizzare, viene contenuta proprio un'istruzione Gambas.
« Ultima modifica: 02 Ottobre 2012, 23:45:07 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Da quello che emerge, sia dalla questione Html, sia da quella Eval(), l'uso di istruzioni contenute all'interno di variabili è possibile (quando la cosa funziona) solo se dette istruzioni - in situazione normale - sono eseguite dalla funzione all'interno di una stringa.

Infatti, detto uso è possibile anche con altre funzioni, la più evidente è la seguente:
Codice: gambas [Seleziona]

Public Sub Form_Open()

   Desktop.OpenTerminal

End


Public Sub Button1_Click()

  Dim s As String
  Dim ss As String[]

   s  = "ls > /dev/pts/1"

   Shell s


  ss = ["ls", "/tmp"]

   Exec ss

End

Vedremo un risultato nel Terminale ed un altro nella console dell'Ide di Gambas.
« Ultima modifica: 02 Ottobre 2012, 21:10:29 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Contenere in una variabile stringa codice Html da utilizzare
« Risposta #6 il: 19 Ottobre 2012, 10:52:16 »
Eval() ???

Rimando ad una discussione apparsa ultimamente sulla Mailing List Internazionale, e che ho riportato in questo forum qui:
http://www.gambas-it.org/smf/index.php?topic=2375.0
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »