Question read-host avec cast [Int]

Plus d'informations
il y a 14 ans 8 mois #10230 par lakcil
read-host avec cast [Int] a été créé par lakcil
Bonjour la communauté,
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.

Plus d'informations
il y a 14 ans 8 mois #10232 par xyz
Réponse de xyz sur le sujet Re:read-host avec cast [Int]
Salut,
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.

Plus d'informations
il y a 14 ans 8 mois #10235 par lakcil
Réponse de lakcil sur le sujet Re:read-host avec cast [Int]
Laurent Dardenne écrit:

Salut,
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(\&quot;s\&quot;,[Int32],[ref]$I)
#False
$I.Value -eq $null
#True
[Management.Automation.LanguagePrimitives]::TryConvertTo(\&quot;10\&quot;,[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 \&quot;Entrez votre choix\&quot;
$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
&lt;br&gt;&lt;br&gt;Message édité par: Laurent Dardenne, à: 8/09/11 21:37

<br><br>Message édité par: lakcil, à: 9/09/11 09:32

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 8 mois #10244 par xyz
Réponse de xyz sur le sujet Re:read-host avec cast [Int]
lakcil écrit:

Tu veux dire utiliser les bornes Min et Max comme paramètres dans la fonction?[/color]

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.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.048 secondes
Propulsé par Kunena