Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Visual Basic - eval()

  1. #1

    Visual Basic - eval()

    Salve a tutti.
    Vorrei sottoporre un piccolo quesito.
    In Visual basic dovrei poter leggere una formula da un file text oppure da una textbox ed eseguirla.
    Se in un textbox oppure in un file txt ho il testo m1+m2 dovrei poterla eseguire e assegnare alla variabile x la somma di m1 e m2.
    Sono riuscito a farlo parzialmente utilizzando MSScriptControl, andando a richiamare dal mio form la sub test(), in cui legge dal file leggi.txt i due valori da assegnare (m1 e m2) alla terza riga legge la formula (m1+m2) e una volta eseguita la somma, vorrei che scrivesse nel file.txt il risultato dell'esecuzione della formula :

    sub test()
    Dim VBScript As New MSScriptControl.ScriptControl
    Dim Code As String
    Dim Result As Object

    Code = "Function CALCOLO()" & vbCrLf
    Code = Code & "Set fso = CreateObject(""Scripting.FileSystemObject"")" & vbCrLf
    Code = Code & "filePath = ""d:\leggi.txt""" & vbCrLf
    Code = Code & "Set file = fso.openTextFile(filePath)" & vbCrLf
    Code = Code & "m1=file.ReadLine" & vbCrLf
    Code = Code & "m2=file.ReadLine" & vbCrLf
    Code = Code & "formula = file.ReadLine" & vbCrLf

    Code = Code & "m1=CDbl(m1)" & vbCrLf
    Code = Code & "m2=CDbl(m2)" & vbCrLf

    Code = Code & "importo = " & "formula" & vbCrLf
    Code = Code & "file.Close" & vbCrLf
    Code = Code & "calcolo = MsgBox(importo, vbOkOnly)" & vbCrLf
    Code = Code & "Set fso = CreateObject(""Scripting.FileSystemObject"")" & vbCrLf
    Code = Code & "filePath = ""d:\file.txt""" & vbCrLf
    Code = Code & "Set file = fso.CreateTextFile(filePath, True)" & vbCrLf
    Code = Code & "file.WriteLine(importo)" & vbCrLf
    Code = Code & "file.Close" & vbCrLf
    Code = Code & "End Function"

    VBScript.Language = "VBSCRIPT"
    VBScript.AllowUI = True
    VBScript.AddCode(Code)

    Result = VBScript.Run("calcolo")
    VBScript = Nothing

    end sub

    Eseguendo il codice non effettua la somma e scrive la stringa di calcolo.
    Per rendervi l'idea, in visual FoxPro, si usavano le macro per eseguire questa tipologia di funzione.

    Avete qualche suggerimento ?
    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,392
    Quote Originariamente inviata da MarioEmanuele
    In Visual basic dovrei poter leggere una formula da un file text oppure da una textbox ed eseguirla.
    Di quale versione di VB stiamo parlando? VB6, VBA, VB.NET, ...?

    Quote Originariamente inviata da MarioEmanuele
    Eseguendo il codice non effettua la somma e scrive la stringa di calcolo.
    Ovvero, cosa succede? Che errore ottieni?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    [QUOTE=alka;25582939]Di quale versione di VB stiamo parlando? VB6, VBA, VB.NET, ...?


    Stiamo parlando di vb.net ( visual studio 2022).

    Non ci sono errori, solo che non viene eseguita la stringa che legge dal file testo come comando.
    Se crei un file testo chiamato file.txt con tre righe ad esempio :

    10
    20
    m1+m2

    vedrai che leggendolo viene assegnato alla variabile m1 il valore 10, alla variabile m2 il valore 20 e alla variabile formula il valore m1+m2. Quando da codice imposto ad importo il valore di formula, viene assegnato correttamente m1+m2 ma non viene eseguito andando a scrivere su file.txt m1+m2 anzich� 30.

    Il problema nasce alla riga ---- Code = Code & "importo = " & "formula" & vbCrLf -----
    Sostanzialmente, mi aspetterei che, dopo aver assegnato a importo la stringa formula ( di conseguenza mettendo un msg (importo) nel codice, vedo che restituisce importo = m1+m2 ) questa somma non viene eseguita

    Visto che si riesce ad assegnare un valore a delle variabili da un file testo, vorrei poter eseguire anche una formula (basica) prelevata da file.

    Grazie

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,478
    Il codice corretto potrebbe essere questo

    Ovviamente cambia il percorso e il nome dei file

    codice:
            Dim VBScript As New MSScriptControl.ScriptControl
            Dim Code As String
            Dim Result As Object
            Dim par1 As String, par2 As String, expr As String
    
    
            Dim sr As StreamReader = New StreamReader("C:\Temp\leggi.txt")
            par1 = sr.ReadLine()
            par2 = sr.ReadLine()
            expr = sr.ReadLine()
            sr.Close()
    
    
            Code = "Function Calcolo()" & vbCrLf
            Code = Code & "m1 = " & par1 & vbCrLf
            Code = Code & "m2 = " & par2 & vbCrLf
            Code = Code & "Calcolo = " & expr & vbCrLf
            Code = Code & "End Function"
    
    
            VBScript.Language = "VBSCRIPT"
            VBScript.AllowUI = True
            VBScript.AddCode(Code)
            Result = VBScript.Run("calcolo")
    
    
            Dim sw As StreamWriter = New StreamWriter("C:\Temp\file.txt")
            sw.WriteLine(Result.ToString)
            sw.Close()
    
    
            VBScript = Nothing
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    GRAZIE 100000 !!!! Funziona ! Pulito, semplice ... essenziale. Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.