PDA

View Full Version : [VB.NET]variabili


LNdemon
27-01-2005, 22:55
Ho un piccolo problema che riguarda le variabili...
utilizzando questo script:

Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" _
Alias "GetPrivateProfileStringW" (ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize As Int32, _
ByVal lpFileName As String) As Int32

Private Declare Unicode Function WritePrivateProfileString Lib "kernel32" Alias _
"WritePrivateProfileStringW" (ByVal lpApplicationName _
As String, ByVal lpKeyName As String, ByVal lpString As String, _
ByVal lpFileName As String) As Long

Private FileNAME As String

Public Function ReadIniData(ByVal Section As String, ByVal Key As String, ByVal file As String) As String
Dim Valore As Long
Dim RetVal As String = Space(256)
FileNAME = System.AppDomain.CurrentDomain.BaseDirectory() & file
Valore = GetPrivateProfileString(Section, Key, "<Nessun valore>", RetVal, RetVal.Length, FileNAME)
Return Trim(RetVal.ToString)
End Function

Public Function WriteIniData(ByVal Section As String, ByVal Key As String, ByVal file As String) As String
Dim Valore As Long
Dim RetVal As String = Space(256)
FileNAME = System.AppDomain.CurrentDomain.BaseDirectory() & file
Valore = WritePrivateProfileString(Section, Key, "<NESSUN VALORE>", FileNAME)
Return Trim(RetVal.ToString)
End Function


faccio returnare ad una var un certo valore di un file ini, cosi:


Dim Registration As String

Private Sub splash_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Registration = ReadIniData("REGISTER", "validation", "rTl.dll")
MsgBox(Registration)
If (Registration = "aaa") Then
MsgBox("ok")
End If
End Sub


Il mio problema è che nell'msgbox mi mostra il giusto valore della variabile, che in questo caso è: aaa .
Pero quando faccio l'if, stranamente, nn mi da il msgBox ok.
Se faccio però:

Dim Registration As String

Private Sub splash_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Registration = "aaa"
MsgBox(Registration)
If (Registration = "aaa") Then
MsgBox("ok")
End If
End Sub

mi funge, perke ? :(

pipozzolo
28-01-2005, 11:53
controlla eventuali spazi - tab o altri caratteri speciali che potrebbero essere presenti quando carichi la stringa dal file ini.
Ad esempio probabilmente ti sta prendendo i caratteri di a capo.

LNdemon
28-01-2005, 12:48
no, nn ci sono caratteri speciali nella stringa, ho controllato :(

pipozzolo
28-01-2005, 12:53
Originariamente inviato da LNdemon
no, nn ci sono caratteri speciali nella stringa, ho controllato :(

Come hai controllato?
Controlla di nuovo... l'unica spiegazione è che le due stringhe non siano uguali.
Stampati a video la lunghezza della stringa, se è come penso io non sarà 3.

LNdemon
28-01-2005, 12:58
come faccio a controllare la lunghe dei caratteri ?

pipozzolo
28-01-2005, 13:00
Originariamente inviato da LNdemon
come faccio a controllare la lunghe dei caratteri ?

MsgBox(Registration.Length)

LNdemon
28-01-2005, 13:12
4 caratteri :eek:

LNdemon
28-01-2005, 13:21
da cosa puo dipendere ? in vb.net quali sonmo i caratteri speciali ? Io so che sono \n\t\e\a

daryl74
28-01-2005, 13:34
Può darsi che la tua varibile registration sia uguale a: " aaa" o "aaa ", in questo caso nel messaggio ti sembrerà corretta (alllo spazio probabilmente non fai caso) ma comparandola nell IF risulta non eguale.

Stai anche attento al fatto che le lettere siano minuscole o maiuscole, vengono considerate differenti a meno che tu non abbia un "Option compare text" all'inizio del codice.

Ciao

pipozzolo
28-01-2005, 13:35
Originariamente inviato da LNdemon
4 caratteri :eek:
;)

Se la situazione è costante (tutti i campi del file .ini ti danno quel carattere in +) allora puoi semplicemente fare un substring

LNdemon
28-01-2005, 14:15
grazie, ci son riuscito finalmente :)