Comment convertir un objet tableau en chaîne dans PowerShell?


175

Comment puis-je convertir un objet tableau en chaîne?

J'ai essayé:

$a = "This", "Is", "a", "cat"
[system.String]::Join(" ", $a)

sans chance . Quelles sont les différentes possibilités dans PowerShell?


5
Voir ma réponse mais votre code fonctionne très bien aussi. Pourquoi dites-vous "sans chance"?
Roman Kuzmin

4
Désolé, oui, cela semble fonctionner, je pense que j'ai raté quelque chose quand j'ai testé cela.
jrara

Réponses:


294
$a = 'This', 'Is', 'a', 'cat'

Utiliser des guillemets doubles (et éventuellement utiliser le séparateur $ofs)

# This Is a cat
"$a"

# This-Is-a-cat
$ofs = '-' # after this all casts work this way until $ofs changes!
"$a"

Utilisation de la jointure d'opérateur

# This-Is-a-cat
$a -join '-'

# ThisIsacat
-join $a

Utilisation de la conversion en [string]

# This Is a cat
[string]$a

# This-Is-a-cat
$ofs = '-'
[string]$a

9
Pour les non-initiés (comme moi) $ofsest documenté ici
Liam

13
La documentation de Stackoverflow a été fermée, le lien de Liam est donc mort. Voici une autre explication de $ OFS, le séparateur de champ de sortie: blogs.msdn.microsoft.com/powershell/2006/07/15
Simon Tewsi

Pourquoi s'appelle-t-il OFS? C'est un nom étrange étant donné qu'il s'appelle IFS sur une coque standard depuis des décennies et des décennies.
Johan Boulé

1
@ JohanBoulé: Parce que l'utilisation du premier caractère du séparateur de champ d'entrée comme séparateur de champ de sortie est un mauvais hack - et ne permet pas de séparer les champs avec des chaînes de plusieurs caractères. (Awk par exemple a des variables FS et OFS).
Martin Bonner soutient Monica le

@martin bonner: merci, c'est logique maintenant. Je ne sais pas comment j'ai gâché ça.
Johan Boulé

36

J'ai trouvé que la canalisation du tableau vers l' Out-Stringapplet de commande fonctionne bien aussi.

Par exemple:

PS C:\> $a  | out-string

This
Is
a
cat

Cela dépend de votre objectif final quant à la meilleure méthode à utiliser.


4
FYI: le simple fait de faire $aaurait le même effet que$a | out-string
JohnLBevan

7
@JohnLBevan Pas toujours. ($a | out-string).getType()= Chaîne. $a.getType()= Objet []. Si vous utilisez $ a comme argument pour une méthode qui attend une chaîne (comme invoke-expressionpar exemple), cela $a | out-stringprésente un net avantage.
rojo

18
1> $a = "This", "Is", "a", "cat"

2> [system.String]::Join(" ", $a)

La ligne deux effectue l'opération et sort vers l'hôte, mais ne modifie pas $ a:

3> $a = [system.String]::Join(" ", $a)

4> $a

This Is a cat

5> $a.Count

1

10

D'un tuyau

# This Is a cat
'This', 'Is', 'a', 'cat' | & {"$input"}

# This-Is-a-cat
'This', 'Is', 'a', 'cat' | & {$ofs='-';"$input"}

Hôte d'écriture

# This Is a cat
Write-Host 'This', 'Is', 'a', 'cat'

# This-Is-a-cat
Write-Host -Separator '-' 'This', 'Is', 'a', 'cat'

Exemple


C'est un truc incroyable. L'exemple ne fonctionne plus, et même si cette réponse a 5 ans, j'essaie d'expliquer ce que j'ai appris aujourd'hui. La variable $ofsis Output Field Separatorqui est utilisée lorsqu'un tableau est converti en chaîne pour la sortie. Ici, il est défini dans le bloc de script renvoyant la valeur de chaîne de l'entrée (tableau du tube) qui est exécutée par la commande &. Je ne savais pas $ofsavant, ainsi que d' &accepter un bloc de script comme argument
Martin Konopka

3

Vous pouvez spécifier le type comme ceci:

[string[]] $a = "This", "Is", "a", "cat"

Vérification du type:

$a.GetType()

Confirme:

    IsPublic Nom IsSerial BaseType
    -------- -------- ---- --------
    True True String [] System.Array

Sortie de $ a:

PS C: \> $ a 
Ce 
Est 
une 
chat

0
$a = "This", "Is", "a", "cat"

foreach ( $word in $a ) { $sent = "$sent $word" }
$sent = $sent.Substring(1)

Write-Host $sent
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.