Question Foreach { ...substring...} et problèmes ;-)

Plus d'informations
il y a 15 ans 6 mois #7702 par DUMOULIN
Bonjour à tous,
Je commence tout juste en PowerShell, et je me heurte à un blocage sur l'extraction de chaînes de caractères. Voici ce que j'ai fait pour le moment :
Le contenu du fichier obtenu après manipulation :
[code:1]2K3EE_CD_7984_86
2K3SE_CD_7984_86
2K3SE_CD_7941_86
2K2EE_CD_7941_86
2K3SE_CD_7979_86
2K3EE_CD_7979_86
2K3SE_CD_7947_86[/code:1]Je ne dois en sortir que les 4 chiffres significatifs après le CD_

Quand je charge en variable une entrée et que je fais substring dessus, ça marche :

[code:1]$test=\"2K3EE_CD_7984_86\"
$test.substring(9,4)
7984[/code:1]
Mais quand j'essaie de parcourir le fichier, je lance ça :
[code:1]$test = get-content TS.txt
foreach {$test.SubString (9,4)}[/code:1]
Il m'insulte violemment, et en plus il doit avoir raison... :
[code:1]Missing opening '(' after keyword 'foreach'.
Au niveau de ligne : 1 Caractère : 9
+ foreach <<<< {$test.SubString (9,4)}
+ CategoryInfo : ParserError: (OpenParenToken:TokenId) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingOpenParenthesisAfterKeyword[/code:1]
Merci de votre aide, j'ai essayé beaucoup de \"combinaisons\", fouillé sur le net et surtout sur le forum, mais je n'ai rien trouvé.

Alexis

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

Plus d'informations
il y a 15 ans 6 mois #7705 par Alan Pinard
Bonjour Harfango,

En lisant ton code, j'ai remarqué qu'il y avait une erreur dans le bout suivant

[code:1]
$test = get-content TS.txt

foreach {$test.SubString (9,4)}
[/code:1]

Cela devrait plutôt être:

[code:1]
$test = get-content TS.txt

$Test | foreach {$_.SubString(9,4)}
[/code:1]

Le problème c'est que $Test est un tableau et toi tu veux pouvoir traiter chaque ligne du tableau. Dans le Foreach, tu prends le tableau au complet alors que c'est pour chaque ligne.

Essaie en changeant ceci et revient nous.

Cordialement,<br><br>Message édité par: Versiona, à: 31/08/10 18:48

Alan Pinard
Version A

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

Plus d'informations
il y a 15 ans 6 mois #7707 par DUMOULIN
Merci beaucoup !

C'est exactement ça, et j'ai en plus compris pourquoi :-)

Bon, il va maintenant me falloir l'intégrer dans une boucle if... Je reviens si je ne m'en sors pas !

Merci encore,

Alexis

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

Plus d'informations
il y a 15 ans 6 mois #7708 par Alan Pinard
Harfango écrit:

C'est exactement ça, et j'ai en plus compris pourquoi :-)


Excellent! Je te souhaite bonne continuation pour le restant de script.

Alan Pinard
Version A

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

Plus d'informations
il y a 15 ans 6 mois #7710 par Richard Lazaro
Bonjour,

Pour aller un peu plus loin :

- Si Get-Content ne contient pas de ligne, la cmdlet retournera $null
- Si Get-Content contient une ligne, la cmdlet retournera un seul objet
- Si Get-Content contient plusieurs lignes, la cmdlet retournera un tableau d'objet

Deplus, foreach permet de parcourir un tableau. Dans ton code il n'y a aucune référence à ce tableau.

Voici donc différents codes :
[code:1]
$test = get-content TS.txt
$test | foreach { $_.SubString(9,4) }
[/code:1]
[code:1]
$test = get-content TS.txt
foreach($ligne in $test) { $ligne.SubString(9,4) }
[/code:1]
[code:1]
get-content TS.txt | foreach { $_.SubString(9,4) }
[/code:1]

Puis attention, il n'y a pas d'espace entre la méthode (SubString) et les paramètres ((9,4)).

Bien Cordialement,
Richard Lazaro.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

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

Plus d'informations
il y a 15 ans 6 mois #7712 par DUMOULIN
Merci pour les précisions :-)

Je continue à avancer, et je dois dire que l'ensemble des ressources disponibles sur le site m'aident vraiment bien !

En parlant d'avancer, quels sont les avantages/inconvénients entre switch et if/elseif... ?

Alexis

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

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