[VB.NET] Aggiornare codice da file

martedì 13 gennaio 2009 - 19.21

peppedp Profilo | Newbie

Salve a tutti! Ho creato, da autodidatta, un programmino che mi serve per lavoro e che mi dà un risultato matematico legato a delle variabili che, in realtà, vengono modificate una volta l'anno dal Ministero delle Attività Produttive. Ora la mia domanda è: come posso aggiornare quelle due variabili fornite da Ministero, senza dover ricompilare il codice?
Grazie a tutti.
Giuseppe

ilario Profilo | Senior Member

la cosa più veloce è inserire le variabili in un file txt o xml o...

il tuo programma all'avvio le legge e poi le utilizza, cosi facendo quando ti cambiano una volta l'anno o più, semplicemente apri il file di testo e le cambi


ciao
ilario

peppedp Profilo | Newbie

Ciao e grazie per la risposta veloce!
Dunque, premetto che non sono una cima in programmazione (ho studiato due libri per crearmi quel programmino che è davvero banale), ma sono capace di capire quello che mi spieghi, vorrei sapere che procedura scegliere per fargli leggere un file ini o magari txt e fargli creare delle variabili i cui valori sono quelli presenti nelle righe del file esterno.
Spero di essere stato chiaro.
Grazie
Giuseppe

ilario Profilo | Senior Member

ciao

Imports System.IO

Dim Variabile1, Variabile2 As String
Private Sub CaricaVariabili()

Using sr As StreamReader = File.OpenText("inserisci il percorso del file")
Dim a As String
a = sr.ReadLine()
While Not a Is Nothing

If a = "#Variabile1" Then

a = sr.ReadLine()
Variabile1 = a

a = sr.ReadLine()


ElseIf a = "#Variabile2" Then

a = sr.ReadLine()
Variabile2 = a

End If
a = sr.ReadLine()

End While

sr.Close()
End Using


il file txt dovrebbe essere composto

#Variabile1
bla1bla1bla1
#Variabile2
bla2bla2bla2


prova se ti può andare bene ovviamente lo devi riadattare al tuo codice

ilario

peppedp Profilo | Newbie

Ilario sei grande. Non ho controllato ancora se va già bene così, ma ad un primo sguardo credo che tu abbia centrato ed affondato il mio problemino.
Ti farò sapere, però.
Un abbraccio

Dunque, aggiorno la situazione, facendo un'altra domanda: se il file da aprire è nella stessa cartella del programma che ho installato sul pc, per dargli il percorso del file devo inserire tutto il percorso (ad esempio c:\programmi\calcolo\) oppure c'è un modo più diretto per dirgli di leggere nella sua cartella?
Per il resto pare che tutto sia andato bene! Ho solo difficoltà a dargli la posizione precisa del file.
Grazie!

alexmed Profilo | Guru

Ciao
Volendo potresti utilizzare la classe "My.Settings" (http://msdn.microsoft.com/it-it/library/saa62613.aspx)

In pratica:
Doppio click su "My Project" in Esplora Soluzioni"
Selezioni "Impostazioni"
Nel campo "Nome" scrivi il nome della variabile (es. "pippo")
Nel campo "Tipo" andrai a mettere "Decimal" (dal momento che la usi per un calcolo matematico)
Nel campo "Ambito" metti "Utente"
Nel campo "Valore" metti il valore della variabile

A questo punto avrai accesso al valore della variabile semplicemente con "My.Settings.pippo"

Potresti inoltre predisporre un Form "Aggiorna valori" in cui ci sono due TextBox due Label ed un Button "Salva"
Nell'evento Load del form andrai a riempire le Label con il valore corrente delle variabili
Me.Label1.Text = My.Settings.pippo

mentre nel nell'evento del Button Salva":

My.Settings.pippo = Me.TextBox.Text (aggiungendo l'eventuale controllo che il testo inserito sia numerico)

Senza andare a cercare il file e direttamente dalla tua applicazione avrai a disposizione i valori della tue variabili

Ciao

peppedp Profilo | Newbie

Alexmed, la tua soluzione mi piace. Mi sembra anche molto pratica! Ora è tardi e già non sono una cima in programmazione. Proverò domani per andare più sicuro sull'applicazione della procedura da te descritta. Ti farò sapere. Intanto grazie ancora!
Giuseppe

ilario Profilo | Senior Member


ciao

ci sono alcuni metodi io ad esempio uso

Application.StartupPath


ciao
ilario

peppedp Profilo | Newbie

@ alexmed
Il tuo metodo va benissimo. L'ho provato e funziona perfettamente.
Ti ringrazio molto per l'aiuto.

@ilario
Vorrei continuare a provare il metodo che mi hai consigliato e non solo per imparare qualcosa che ancora non so fare, ma perchè penso che l'aggiornamento da file mi consenta di avere un programma che mi piace di più.
Ti chiederò ancora aiuto, confidando nella pazienza tua, di alexmed e di tutti quelli che potranno aiutarmi.
Grazie.

P.S. una domanda su printdialog: aperta la finestra di dialogo, al click del pulsante stampa mi riapre di nuovo la schermata di dialogo e solo al secondo tentativo di stampa parte l'ordine per la stampante.
Mi spiegate perché?
Grazie ancora

alexmed Profilo | Guru

Ciao Giuseppe,
Condivido pienamente la tua filosofia.

A questo punto, quindi, ti stuzzico su un'altra strada: quella del DataBase.
E' decisamente più "difficile" ma sicuramente puoi ottenere risultati ancora più potenti. Ad esempio l'anno a cui si riferiscono le due aliquote e lo storico.

Per il PrintDialog postaci il codice

Questo comunque è un esempio per utilizzare il controllo PrinDialog

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ciao

peppedp Profilo | Newbie

Caro alexmed, tu mi stuzzichi ed anticipi le mie mosse
Devi sapere che in una futura revisione del programma avevo pensato di implementare un database, che permetta calcoli ancora più speciali.
Ti volevo chiedere, infatti: data una tabella, come faccio, date le coordinate X ed Y, a prelevare un dato da una casella ed inserirla in una casella di testo?.
Però, ho una cosa che devo premettere: non mi farò scrupolo di sembrare stupido e vi chiederò anche cose che so essere assurdamente banali (se non ci riesco, non ci riesco...)
A presto
Giuseppe

ilario Profilo | Senior Member

ciao

<data una tabella, come faccio, date le coordinate X ed Y, a prelevare un dato da una <casella ed inserirla in una casella di testo

stai parlando di una tabella di db e se si quale?


ps. stai cambiando argomento rispetto al post, magari chiudi questo e riaprine un altro con il nuovo argomento

alexmed Profilo | Guru

Ciao

@peppedp
Hai risolto con il PrintDialog?

>data una tabella, come faccio, date le coordinate X ed Y, a prelevare un dato da una casella ed inserirla in una casella di testo?.
Anche a me non mi chiaro.

Come dice ilario, se hai risolto con "Aggiornare codice da file", dovresti chiudere il post cliccando su "Accetta" ed aprirne un'altro.

> non mi farò scrupolo di sembrare stupido e vi chiederò anche cose che so essere assurdamente banali (se non ci riesco, non ci riesco...)
Hanno coniato così tante massime sull'argomento che non me nè ricordo più neanche una!!!
Chiedi tranquillamente.

Ciao
@alexmed

peppedp Profilo | Newbie

Caro alexmed, prima di tutto grazie per i tuoi consigli.
Ho applicato il codice che mi hai consigliato per il PrintDialog ed il risultato è stato perfetto.
Ora il mio programma ha sia le variabili modificabili come mi hai consigliato tu, che un comando stampa decente.
Per quanto riguarda la lettura delle variabili da file, mi riprometto di provarci assiduamente questo week end, perchè per il poco tempo che posso dedicare a all'informatica, dopo il lavoro e mia figlia piccola (hai visto a che ora rispondo?), mi è stato difficile provare prima. Appena provo vi faccio sapere e se tutto va bene chiudo il thread.
Intanto vi auguro buona giornata e grazie, grazie, grazie.
Giuseppe

peppedp Profilo | Newbie

Ciao, come detto ci sto provando.
Ecco il codice che uso (con l'aiuto di ilario):
Public Class frmMicropermanenti

Private Sub CaricaVariabili()
Dim DecVALORE_PUNTO As String
Dim DecVALORE_ITT As String
Dim StrVersione As String
Dim path As String = Application.StartupPath()

Using oReader As StreamReader = File.OpenText("Indici.txt")
Dim a As String

a = oReader.ReadLine()
While Not a Is Nothing

If a = "#Variabile1" Then
a = oReader.ReadLine()
DecVALORE_PUNTO = a

a = oReader.ReadLine()

ElseIf a = "#Variabile2" Then
a = oReader.ReadLine()
DecVALORE_ITT = a

a = oReader.ReadLine()

ElseIf a = "#Variabile3" Then
a = oReader.ReadLine()
StrVersione = a
End If
a = oReader.ReadLine()

End While

oReader.Close()
End Using
End Sub

Private Sub frmMicropermanenti_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
CaricaVariabili()
lblTotaleDb.Text = FormatCurrency("0")
lblTotItt.Text = FormatCurrency("0")
lblTotItp1.Text = FormatCurrency("0")
lblTotItp2.Text = FormatCurrency("0")
lblTotItp3.Text = FormatCurrency("0")
lblDannoMorale.Text = FormatCurrency("0")
txtSpese.Text = FormatCurrency("0")
lblTotale.Text = FormatCurrency("0")

End Sub

Il file index è così strutturato:
#Variabile1
697,92
#Variabile2
40,97
#Variabile3
D.M. 15.06.2008

Il programma non funziona.
In realtà legge il primo valore, ma non gli altri due...
AIUTO!!!

alexmed Profilo | Guru

Ciao
Ho modificato un pò sia il codice che il file

Codice:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

File:

697,92
40,97
D.M. 15.06.2008


Ciao
alexmed

peppedp Profilo | Newbie

Ero arrivato alla soluzione del file fatto come dici tu. Al resto non ancora. Ora applico tutto e ti faccio sapere!
Grazie

peppedp Profilo | Newbie

Cari amici, grazie. Il vostro aiuto ha portato i suoi frutti ed il file è stato letto senza problemi. Ora completerò il mio programmino con piccoli aggiusti.
Intanto, non ho altre parole per dirvi grazie.
Sono sicuro che ci risentiremo presto.
Ciao a tutti ed un grazie particolare ad ilario ed alexmed.
Giuseppe
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5