Je travaille sur un script PowerShell où je prends une entrée d'une longue chaîne (à partir d'un fichier CSV) au format:

Nom du groupe un
Nom du groupe deux
Nom du groupe trois
...

J'essaye de l'analyser avec

($entry.'Group Name').split("`n ") | %{
    if ($_) {
        # Do something with the group name
        $_
    }
}

Je veux obtenir une sortie comme:

Nom du groupe un
Nom du groupe deux
Nom du groupe trois
...

Mais cela se traduit par:

Groupe
Un
Nom
Groupe
Deux
...

4
Caspian Peavyhouse 24 janv. 2017 à 21:40

4 réponses

Meilleure réponse

L'argument de chaîne dans {{X0 }} est une liste de caractères à diviser, pas une séquence de caractères à associer puis à diviser. Votre code existant sera divisé en nouvelle ligne et divisé en espace.

Si vous souhaitez uniquement fractionner sur une nouvelle ligne, utilisez:

.split("`n")

Si vous souhaitez fractionner sur la séquence de caractères d'une nouvelle ligne immédiatement suivie d'un espace, vous pouvez utiliser Regex.Split():

[Regex]::Split($entry.'Group Name',"`n ") | ...

Vous pouvez également utiliser l'opérateur -split, qui se divise également par une chaîne et non par une liste de caractères:

$entry.'Group Name' -split "`n "
1
Bacon Bits 17 août 2017 à 13:53

Si je lis correctement, votre appel à .Split passe à la fois `n et le caractère espace. Donc, vous demandez en fait à PowerShell de transformer une chaîne comme "Group One Name" en une liste comme @("Group", "One", "Name").

Si $entry est un seul enregistrement et que vous exécutez cette ligne une fois pour chacun des "Nom du groupe un", "Nom du groupe deux" et "Nom du groupe trois", vous n'avez probablement pas besoin d'appeler { {X1}} du tout - utilisez simplement $entry.'Group Name' directement.

2
Jonathan Gilbert 24 janv. 2017 à 18:46

Si je comprends bien, il vous suffit de supprimer l'espace du code existant.

.split("`n ")

Devrait être:

.split("`n")

Le code existant utilise à la fois nouvelle ligne et espace comme délimiteurs pour diviser la chaîne.

0
Peter Mortensen 24 déc. 2018 à 23:44

Je pense que vous avez besoin du caractère d'échappement `r Windows pour un retour de ligne.

0
Peter Mortensen 24 déc. 2018 à 23:45