Question
Incrémenter le nom d'une variable
- DARTEVELLE
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 16
- Remerciements reçus 0
il y a 12 ans 2 mois #11158
par DARTEVELLE
Incrémenter le nom d'une variable a été créé par DARTEVELLE
Bonjour,
Après être tombé pas mal de fois sur ce forum pour des petits problèmes avec powershell, j'ai décidé de m'y inscrire
Cette fois-ci j'ai un soucis je pense assez simple, mais dont je ne trouve pas la solution
J'ai ce code :
[code:1]foreach ($i in $liste) {
[...]
if ($content -Like \"*<B>Toner noir ~9*\"«») {
$objProgressBar$i.Value = 90
}
if ($content -Like \"*<B>Toner noir ~8*\"«») {
$objProgressBar$i.Value = 80
}
[...]
}
[/code:1]
J'aimerais avoir en fait plusieurs variable $objProgressBarxx, avec xx la valeur de $i. $i peut avoir comme valeur 14, 15, 16, 17 et d'autres chiffres dans ce style.
Quelque chose qui doit être simple m'échappe.
Merci d'avance de votre aide <br><br>Message édité par: Theo25, à: 17/02/12 09:02
Après être tombé pas mal de fois sur ce forum pour des petits problèmes avec powershell, j'ai décidé de m'y inscrire
Cette fois-ci j'ai un soucis je pense assez simple, mais dont je ne trouve pas la solution
J'ai ce code :
[code:1]foreach ($i in $liste) {
[...]
if ($content -Like \"*<B>Toner noir ~9*\"«») {
$objProgressBar$i.Value = 90
}
if ($content -Like \"*<B>Toner noir ~8*\"«») {
$objProgressBar$i.Value = 80
}
[...]
}
[/code:1]
J'aimerais avoir en fait plusieurs variable $objProgressBarxx, avec xx la valeur de $i. $i peut avoir comme valeur 14, 15, 16, 17 et d'autres chiffres dans ce style.
Quelque chose qui doit être simple m'échappe.
Merci d'avance de votre aide <br><br>Message édité par: Theo25, à: 17/02/12 09:02
Connexion ou Créer un compte pour participer à la conversation.
- Arthur
- Hors Ligne
- Membre elite
Réduire
Plus d'informations
- Messages : 226
- Remerciements reçus 0
il y a 12 ans 2 mois #11159
par Arthur
Réponse de Arthur sur le sujet Re:Incrémenter le nom d'une variable
Salut,
Une des façons d'utiliser les variables dynamiques :
[code:1]0..10|%{ New-Variable \"MaVar_$_\" $_ }
$MaVar_0
0..10|%{ Set-Variable \"MaVar_$_\" \"toto$_\" }
$MaVar_1[/code:1]
Je te préviens tout de même que les variables dynamiques apportent souvent plus de problèmes que de solutions.
Cdt.
Une des façons d'utiliser les variables dynamiques :
[code:1]0..10|%{ New-Variable \"MaVar_$_\" $_ }
$MaVar_0
0..10|%{ Set-Variable \"MaVar_$_\" \"toto$_\" }
$MaVar_1[/code:1]
Je te préviens tout de même que les variables dynamiques apportent souvent plus de problèmes que de solutions.
Cdt.
Connexion ou Créer un compte pour participer à la conversation.
- Arthur
- Hors Ligne
- Membre elite
Réduire
Plus d'informations
- Messages : 226
- Remerciements reçus 0
il y a 12 ans 2 mois #11160
par Arthur
Réponse de Arthur sur le sujet Re:Incrémenter le nom d'une variable
J'avais oublié :
[code:1]0..10|%{ Write-Host $((Get-Variable \"MaVar_$_\"«»).value) }[/code:1]
[code:1]0..10|%{ Write-Host $((Get-Variable \"MaVar_$_\"«»).value) }[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- DARTEVELLE
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 16
- Remerciements reçus 0
il y a 12 ans 2 mois #11161
par DARTEVELLE
Réponse de DARTEVELLE sur le sujet Re:Incrémenter le nom d'une variable
Merci pour ta réponse
J'ai contourner un peu mon problème avec ceci :
[code:1] if ($i -eq \"10\"«») {
$objProgressBar10.Value = $objProgressBar.Value
}
if ($i -eq \"11\"«») {
$objProgressBar11.Value = $objProgressBar.Value
}
if ($i -eq \"12\"«») {
$objProgressBar12.Value = $objProgressBar.Value
}
if ($i -eq \"13\"«») {
$objProgressBar13.Value = $objProgressBar.Value
}
if ($i -eq \"14\"«») {
$objProgressBar14.Value = $objProgressBar.Value
}[/code:1]
Ma solution est simple, mais ça rajoute beaucoup de code, et faut faire ça pour chaque valeur de $i.
Etant donné que je n'ai qu'une dizaine de valeur possible, ça va encore.
Mais je garde ta solution de côté si jamais je dois traiter beaucoup plus de valeur
Merci !
J'ai contourner un peu mon problème avec ceci :
[code:1] if ($i -eq \"10\"«») {
$objProgressBar10.Value = $objProgressBar.Value
}
if ($i -eq \"11\"«») {
$objProgressBar11.Value = $objProgressBar.Value
}
if ($i -eq \"12\"«») {
$objProgressBar12.Value = $objProgressBar.Value
}
if ($i -eq \"13\"«») {
$objProgressBar13.Value = $objProgressBar.Value
}
if ($i -eq \"14\"«») {
$objProgressBar14.Value = $objProgressBar.Value
}[/code:1]
Ma solution est simple, mais ça rajoute beaucoup de code, et faut faire ça pour chaque valeur de $i.
Etant donné que je n'ai qu'une dizaine de valeur possible, ça va encore.
Mais je garde ta solution de côté si jamais je dois traiter beaucoup plus de valeur
Merci !
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 12 ans 2 mois #11173
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Incrémenter le nom d'une variable
Salut,
bilbao écrit:
Là bilbao, il manque un truc
Theo25 écrit:
Une autre solution :
[code:1]
#Crée un objet personnalisé
$objProgressBar=1|Select Value
$objProgressBar.Value=\"951\"
#Affiche le code de construction des variables
# le bactick (`) retarde l'interprétation des noms de variable, seul le numéro accolé au nom de variable est substitué, ici $_.
1..5|Foreach { write-host \"`$objProgressBar$_=1|Select Value;`$objProgressBar$_.Value=$_;gv objProgressBar$_\"}
# $objProgressBar1=1|Select Value;$objProgressBar1.Value=1;gv objProgressBar1
# $objProgressBar2=1|Select Value;$objProgressBar2.Value=2;gv objProgressBar2
# $objProgressBar3=1|Select Value;$objProgressBar3.Value=3;gv objProgressBar3
# $objProgressBar4=1|Select Value;$objProgressBar4.Value=4;gv objProgressBar4
# $objProgressBar5=1|Select Value;$objProgressBar5.Value=5;gv objProgressBar5
#Exécute le code de construction des variables
1..5|Foreach { Invoke-Expression \"`$objProgressBar$_=1|Select Value;`$objProgressBar$_.Value=$_;gv objProgressBar$_\"}
# Name Value
# ----
# objProgressBar1 @{Value=1}
# objProgressBar2 @{Value=2}
# objProgressBar3 @{Value=3}
# objProgressBar4 @{Value=4}
# objProgressBar5 @{Value=5}
1..5|% {iex \"`$objProgressBar$_.Value = `$objProgressBar.Value;gv objProgressBar$_\"}
# Name Value
# ----
# objProgressBar1 @{Value=951}
# objProgressBar2 @{Value=951}
# objProgressBar3 @{Value=951}
# objProgressBar4 @{Value=951}
# objProgressBar5 @{Value=951}
[/code:1]
Ainsi donc, ton code d'origine :
[code:1]
if ($i -eq \"10\"«») {
$objProgressBar10.Value = $objProgressBar.Value
}
if ($i -eq \"11\"«») {
$objProgressBar11.Value = $objProgressBar.Value
}
if ($i -eq \"12\"«») {
$objProgressBar12.Value = $objProgressBar.Value
}
if ($i -eq \"13\"«») {
$objProgressBar13.Value = $objProgressBar.Value
}
if ($i -eq \"14\"«») {
$objProgressBar14.Value = $objProgressBar.Value
}
#'Lignes' ad lib, 'Code' pat.
[/code:1]
se trouve résumé à :
[code:1]
$i=5
Invoke-Expression \"`$objProgressBar$i.Value = `$objProgressBar.Value\"}
#iex \"`$objProgressBar$i.Value = `$objProgressBar.Value;gv objProgressBar$i\"}
[/code:1]
Dans ta formulation d'origine \"J'aimerais avoir en fait plusieurs variable $objProgressBarxx\" si le besoin est bien sur ce point, la solution d'implémentation, car il n'en existe pas 50, est basée sur du code qui lui contient \"des noms de variables contextuelles\", l'opération de construction étant sur le code et pas sur les variables.
D'où l'approche de bilbao qui a correctement répondu à ta formulation.
Et si je peux me permettre, n'hésites pas les prochaines fois que tu postes, dans le cas où la solution proposée ne satisfait pas ton besoin, à exprimer clairement pourquoi.
Cordialement.<br><br>Message édité par: Laurent Dardenne, à: 18/02/12 14:16
bilbao écrit:
Un exemple ? Une paires d'arguments ?Je te préviens tout de même que les variables dynamiques apportent souvent plus de problèmes que de solutions.
Là bilbao, il manque un truc
Theo25 écrit:
Ce qui, pour moi, est rarement la bonne solution, souvent la plus rapide et toujours au détriment de la compréhension...J'ai contourner un peu mon problème avec ceci :
Une autre solution :
[code:1]
#Crée un objet personnalisé
$objProgressBar=1|Select Value
$objProgressBar.Value=\"951\"
#Affiche le code de construction des variables
# le bactick (`) retarde l'interprétation des noms de variable, seul le numéro accolé au nom de variable est substitué, ici $_.
1..5|Foreach { write-host \"`$objProgressBar$_=1|Select Value;`$objProgressBar$_.Value=$_;gv objProgressBar$_\"}
# $objProgressBar1=1|Select Value;$objProgressBar1.Value=1;gv objProgressBar1
# $objProgressBar2=1|Select Value;$objProgressBar2.Value=2;gv objProgressBar2
# $objProgressBar3=1|Select Value;$objProgressBar3.Value=3;gv objProgressBar3
# $objProgressBar4=1|Select Value;$objProgressBar4.Value=4;gv objProgressBar4
# $objProgressBar5=1|Select Value;$objProgressBar5.Value=5;gv objProgressBar5
#Exécute le code de construction des variables
1..5|Foreach { Invoke-Expression \"`$objProgressBar$_=1|Select Value;`$objProgressBar$_.Value=$_;gv objProgressBar$_\"}
# Name Value
# ----
# objProgressBar1 @{Value=1}
# objProgressBar2 @{Value=2}
# objProgressBar3 @{Value=3}
# objProgressBar4 @{Value=4}
# objProgressBar5 @{Value=5}
1..5|% {iex \"`$objProgressBar$_.Value = `$objProgressBar.Value;gv objProgressBar$_\"}
# Name Value
# ----
# objProgressBar1 @{Value=951}
# objProgressBar2 @{Value=951}
# objProgressBar3 @{Value=951}
# objProgressBar4 @{Value=951}
# objProgressBar5 @{Value=951}
[/code:1]
Ainsi donc, ton code d'origine :
[code:1]
if ($i -eq \"10\"«») {
$objProgressBar10.Value = $objProgressBar.Value
}
if ($i -eq \"11\"«») {
$objProgressBar11.Value = $objProgressBar.Value
}
if ($i -eq \"12\"«») {
$objProgressBar12.Value = $objProgressBar.Value
}
if ($i -eq \"13\"«») {
$objProgressBar13.Value = $objProgressBar.Value
}
if ($i -eq \"14\"«») {
$objProgressBar14.Value = $objProgressBar.Value
}
#'Lignes' ad lib, 'Code' pat.
[/code:1]
se trouve résumé à :
[code:1]
$i=5
Invoke-Expression \"`$objProgressBar$i.Value = `$objProgressBar.Value\"}
#iex \"`$objProgressBar$i.Value = `$objProgressBar.Value;gv objProgressBar$i\"}
[/code:1]
Dans ta formulation d'origine \"J'aimerais avoir en fait plusieurs variable $objProgressBarxx\" si le besoin est bien sur ce point, la solution d'implémentation, car il n'en existe pas 50, est basée sur du code qui lui contient \"des noms de variables contextuelles\", l'opération de construction étant sur le code et pas sur les variables.
D'où l'approche de bilbao qui a correctement répondu à ta formulation.
Et si je peux me permettre, n'hésites pas les prochaines fois que tu postes, dans le cas où la solution proposée ne satisfait pas ton besoin, à exprimer clairement pourquoi.
Cordialement.<br><br>Message édité par: Laurent Dardenne, à: 18/02/12 14:16
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- DARTEVELLE
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 16
- Remerciements reçus 0
il y a 12 ans 2 mois #11176
par DARTEVELLE
Réponse de DARTEVELLE sur le sujet Re:Incrémenter le nom d'une variable
Merci pour cette solution très complète.
La solution de Bilbao répond tout a fait à mon problème, tout comme la tienne qui est très complète.
Du coup j'ai une petite question sur ta solution.
[code:1]1..5|Foreach { Invoke-Expression \"`$objProgressBar$_=1|Select Value;`$objProgressBar$_.Value=$_;gv objProgressBar$_\"}
[/code:1]
\"1..5\" veut bien dire que l'on va avoir :
$objProgressBar1
$objProgressBar2
$objProgressBar3
$objProgressBar4
$objProgressBar5
Mais si on veut une liste comme celle-ci :
[code:1]$liste = @(10,11,12,13,14,15,74,76)[/code:1]
Merci d'avance
La solution de Bilbao répond tout a fait à mon problème, tout comme la tienne qui est très complète.
Du coup j'ai une petite question sur ta solution.
[code:1]1..5|Foreach { Invoke-Expression \"`$objProgressBar$_=1|Select Value;`$objProgressBar$_.Value=$_;gv objProgressBar$_\"}
[/code:1]
\"1..5\" veut bien dire que l'on va avoir :
$objProgressBar1
$objProgressBar2
$objProgressBar3
$objProgressBar4
$objProgressBar5
Mais si on veut une liste comme celle-ci :
[code:1]$liste = @(10,11,12,13,14,15,74,76)[/code:1]
Merci d'avance
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.078 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Incrémenter le nom d'une variable