Question
read-host avec cast [Int]
- lakcil
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 23
- Remerciements reçus 0
Je viens une fois de plus sollicité votre aide.
Mon besoin est simple mais après des recherche, j'ai toujours du mal à le mettre en place.
Voilà je veux récupérer l'entrée utilisateur et ne prendre en compte cet entrée que si elle est un [int] et est comprise dans une plage donnée.
la plage est de zéro jusqu'à la taille d'un arraylist.
Mon code est en pièce jointe.
Le problème est que en forçant ma variable qui prend l'entrée utilisateur ($choix) en [int], l'entrée d'un string provoque une erreur (ce qui est normal) mais pas le résultat que je voudrais.
L'appui de la touche \"Entrer\" provoque également une sortie des script.
Merci pour vos retours.
La pièce jointe testNum.ps1 est absente ou indisponible
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
tu peux utiliser [Int]::TryParse ou une Api du framework PowerShell :
[code:1]
[ref]$I=$null
[Management.Automation.LanguagePrimitives]::TryConvertTo(\"s\",[Int32],[ref]$I)
#False
$I.Value -eq $null
#True
[Management.Automation.LanguagePrimitives]::TryConvertTo(\"10\",[Int32],[ref]$I)
#True
$I.Value -eq $null
#False[/code:1]
Une solution , à valider :
[code:1]
function EntreeValide () {
param ([System.Collections.ArrayList]$listeActions)
$Quit=$false
$Max=$listeActions.Count
do {
Write-Host \"Entrez votre choix\"
$Saisie = (Read-Host).Trim()
if ($Saisie -ne [string]::Empty)
{
[ref]$I=$null
if ([Management.Automation.LanguagePrimitives]::TryConvertTo($Saisie,[Int32],[ref]$I))
{
$Value=$I.Value
$Quit= ($Value -gt -1) -and ($Value -le $Max)
}
}
} while ($Quit -eq $false)
return $Saisie
}
#test
$liste = new-object System.Collections.ArrayList
$liste.Addrange(@(0..9))
#ou
rv liste
$liste = new-object System.Collections.ArrayList -Property @{Addrange=@(0..9)}
#ou
rv liste
$liste = new-object Collections.ArrayList -P @{Addrange=@(0..9)}
EntreeValide -listeActions $liste[/code:1]
Mais pourquoi ne pas utiliser, dans la fonction, des bornes min et max ?<br><br>Message édité par: Laurent Dardenne, à: 8/09/11 21:37
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- lakcil
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 23
- Remerciements reçus 0
<br><br>Message édité par: lakcil, à: 9/09/11 09:32Salut,
tu peux utiliser [Int]::TryParse ou une Api du framework PowerShell :
[code:1]
J'ai un peu de mal à comprendre cette ligne juste en dessous
[ref]$I=$null
[Management.Automation.LanguagePrimitives]::TryConvertTo(\"s\",[Int32],[ref]$I)
#False
$I.Value -eq $null
#True
[Management.Automation.LanguagePrimitives]::TryConvertTo(\"10\",[Int32],[ref]$I)
#True
$I.Value -eq $null
#False[/code:1]
Une solution , à valider :
Je viens de la tetser et elle correspond bien à ce que je veux, merci
[code:1]
function EntreeValide () {
param ([System.Collections.ArrayList]$listeActions)
$Quit=$false
$Max=$listeActions.Count
do {
Write-Host \"Entrez votre choix\"
$Saisie = (Read-Host).Trim()
if ($Saisie -ne [string]::Empty)
{
[ref]$I=$null
J'ai un peu de mal à comprendre cette ligne juste en dessous
if ([Management.Automation.LanguagePrimitives]::TryConvertTo($Saisie,[Int32],[ref]$I))
{
$Value=$I.Value
$Quit= ($Value -gt -1) -and ($Value -le $Max)
}
}
} while ($Quit -eq $false)
return $Saisie
}
#test
$liste = new-object System.Collections.ArrayList
$liste.Addrange(@(0..9))
#ou
rv liste
$liste = new-object System.Collections.ArrayList -Property @{Addrange=@(0..9)}
#ou
rv liste
$liste = new-object Collections.ArrayList -P @{Addrange=@(0..9)}
EntreeValide -listeActions $liste[/code:1]
Mais pourquoi ne pas utiliser, dans la fonction, des bornes min et max ?
Tu veux dire utiliser les bornes Min et Max comme paramètres dans la fonction?
Encore merci
<br><br>Message édité par: Laurent Dardenne, à: 8/09/11 21:37
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
Oui, ainsi tu peux passer un tableau (System.Array) ou un autre type de collection. Surtout que ton cas tu n'utilises pas directement le contenu de la collection.Tu veux dire utiliser les bornes Min et Max comme paramètres dans la fonction?[/color]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- read-host avec cast [Int]