Page 1 sur 1
[..] Variable vide
Posté : ven. 30 sept. 2011 12:58
par jcaspar
Bo
njour à tous !J'aurais besoin de déterminer si une variable n'a aucune valeur qui lui attribuée ...
apparement des double quotes vides ne fonctionne pas, la valeur 0 non plus ....
Merci d'avance pour vos conseils et astuces
Jean Marc
Code : Tout sélectionner
if $var=" " Then
msgbox(48,"Attention vous n'avez pas sélectionner le fichier HTML","Veuillier selectionner un fichier",10)
endif
Re: [..] Variable vide
Posté : ven. 30 sept. 2011 13:03
par TT22
Re: [..] Variable vide
Posté : ven. 30 sept. 2011 14:48
par jchd
Une variable juste déclarée a par défaut le type chaîne et la valeur chaîne vide.
► Afficher le texte
Code : Tout sélectionner
Local $var
Local $array[5]
ConsoleWrite("$var est : " & _VarDump($var) & @LF)
ConsoleWrite("$array est : " & _VarDump($array) & @LF)
Func _VarDump(ByRef $vVar, $sIndent = '')
Select
Case IsDllStruct($vVar)
Return 'Struct(' & DllStructGetSize($vVar) & ') @:' & Hex(DllStructGetPtr($vVar)) & ' = ' & __ShortHexDump(DllStructGetPtr($vVar, 1), DllStructGetSize($vVar))
Case IsArray($vVar)
Local $iSubscripts = UBound($vVar, 0)
Local $sDims = 'Array'
$iSubscripts -= 1
For $i = 0 To $iSubscripts
$sDims &= '[' & UBound($vVar, $i + 1) & ']'
Next
Return $sDims & @CRLF & _VarDumpArray($vVar, $sIndent)
Case IsBinary($vVar)
Return 'Binary(' & BinaryLen($vVar) & ') = ' & __ShortHexDump(DllStructGetPtr($vVar, 1), DllStructGetSize($vVar))
Case IsBool($vVar)
Return 'Boolean(' & $vVar & ')'
Case IsFloat($vVar)
Return 'Float(' & $vVar & ')'
Case IsHWnd($vVar)
Return 'HWnd(' & $vVar & ')'
Case IsInt($vVar)
Return 'Integer(' & $vVar & ')'
Case IsKeyword($vVar)
Return 'Keyword(' & $vVar & ')'
Case IsPtr($vVar)
Return 'Pointer(' & $vVar & ')'
Case IsObj($vVar)
Return 'Object(' & ObjName($vVar) & ')'
Case IsString($vVar)
Return 'String(' & StringLen($vVar) & ") '" & $vVar & "'"
Case Else
Return 'Unknown(' & $vVar & ')'
EndSelect
EndFunc
Func _VarDumpArray(ByRef $aArray, $sIndent = '')
Local $sDump
Local $sArrayFetch, $sArrayRead, $bDone
Local $iSubscripts = UBound($aArray, 0)
Local $aUBounds[$iSubscripts]
Local $aCounts[$iSubscripts]
$iSubscripts -= 1
For $i = 0 To $iSubscripts
$aUBounds[$i] = UBound($aArray, $i + 1) - 1
$aCounts[$i] = 0
Next
$sIndent &= @TAB
While 1
$bDone = True
$sArrayFetch = ''
For $i = 0 To $iSubscripts
$sArrayFetch &= '[' & $aCounts[$i] & ']'
If $aCounts[$i] < $aUBounds[$i] Then $bDone = False
Next
$sArrayRead = Execute('$aArray' & $sArrayFetch)
If @error Then
ExitLoop
Else
$sDump &= $sIndent & $sArrayFetch & ' => ' & _VarDump($sArrayRead, $sIndent)
If Not $bDone Then
$sDump &= @CRLF
Else
Return $sDump
EndIf
EndIf
For $i = $iSubscripts To 0 Step -1
$aCounts[$i] += 1
If $aCounts[$i] > $aUBounds[$i] Then
$aCounts[$i] = 0
Else
ExitLoop
EndIf
Next
WEnd
EndFunc
Func __ShortHexDump($ptr, $blen)
Local $tmpbin = DllStructCreate("byte[" & $blen & "]", $ptr)
If $blen <= 64 Then
Return('0x' & Hex(DllStructGetData($tmpbin, 1)))
Else
Return('0x' & Hex(BinaryMid(DllStructGetData($tmpbin, 1), 1, 32)) & ' ... ' & Hex(BinaryMid(DllStructGetData($tmpbin, 1), $blen - 31, 32)))
EndIf
EndFunc
Un moyen brutal de vérifier si la variable a été assignée (outre la logique de la structure du programme, qui devrait permettre d'en être sûr) est de lui coller auparavant en douce une valeur délirante qu'un utilisateur a peu de chance de "réinventer" par hasard, genre $var = .2468013579 ou une chaîne bizarre, comme $var = '₢₣₤₥₦₧₨₩'
Re: [..] Variable vide
Posté : mer. 05 oct. 2011 13:17
par zeshrek
Autre solution plus simple (a mon sens) a mettre en oeuvre.
Tu attends a semble t il un nom de fichier ? Donc une chaine texte.
Bon, alors en début de fonction (ou de programme, faudra juste remplacer 'Local' par 'Global') tu déclare ta variable en lui assignant une valeur numérique, et ensuite tu teste si ta variable est de type numérique. Si oui, c'est qu'elle a pas recu le bon contenu, sinon, ca devrait etre bon ('fin, comme on a pas tout ton prog, c'est difficile a dire, on sait pas comment tu lui assignes la valeur)
Code : Tout sélectionner
Local $Variable = 3615
(...)
If IsString($variable) then
; Tu fais ce qui est a faire car ta variable est bien une chaine
else
msgbox(48,"Attention vous n'avez pas sélectionner le fichier HTML","Veuillier selectionner un fichier",10)
endif