web-dev-qa-db-fra.com

Suppression d'espaces d'une entrée variable à l'aide de PowerShell 4.0

J'ai déjà essayé plusieurs choses mais elles ne semblent pas fonctionner pour une raison quelconque. 

Essentiellement, ce que je tente de faire est de demander à un utilisateur de saisir une valeur à l'aide de la cmdlet "Read-Host", puis de la supprimer de tout espace.

J'ai essayé:

$answer = read-Host
$answer.replace(' ' , '""')

Et:

$answer = read-Host
$answer -replace (' ')

Il me manque probablement quelque chose de vraiment évident, mais si quelqu'un pouvait m'aider ou me montrer un moyen plus facile d'y parvenir, je l'apprécierais. 

J'allais assigner la variable à une commande et la supprimer de cette façon, mais aucun des exemples que j'ai vus ne fonctionne, même s'ils ont l'air beaucoup plus facile.

17
cloudnyn3

L'opérateur Replace signifie Remplacer quelque chose par quelque chose d'autre; ne pas confondre avec la fonctionnalité de suppression.

Vous devez également envoyer le résultat traité par l'opérateur à une variable ou à un autre opérateur. Ni .Replace(), ni -replace ne modifient la variable d'origine.

Pour supprimer tous les espaces, utilisez 'Remplacez n'importe quel symbole d'espace par une chaîne vide'

$string = $string -replace '\s',''

Pour supprimer tous les espaces au début et à la fin de la ligne et remplacer tous les symboles de double espacement supplémentaire ou les symboles de tabulation par le symbole de la barre d'espace, utilisez

$string = $string -replace '(^\s+|\s+$)','' -replace '\s+',' '

ou la méthode plus native System.String

$string = $string.Trim()

Il est préférable d'utiliser l'expression rationnelle, car ' ' signifie uniquement le symbole 'barre d'espacement' et '\s' signifie 'barre d'espacement, tabulation et autres symboles d'espace'. Notez que $string.Replace() remplace 'Normal', et $string -replace remplace RegEx, qui est plus lourd mais plus fonctionnel.

Notez que RegEx contient des symboles spéciaux tels que les points (.), les accolades ([]()), les barres obliques (\), les chapeaux (^), les signes mathématiques (+-) ou les signes dollar ($) à échapper. ('my.space.com' -replace '\.','-' => 'my-space-com'. Un signe dollar avec un numéro (ex $1) doit être utilisé avec précaution sur la partie droite

'2033' -replace '(\d+)',$( 'Data: $1')
Data: 2033

UPDATE: Vous pouvez également utiliser $str = $str.Trim(), avec TrimEnd() et TrimStart(). En savoir plus sur System.String MSDN page.

37
filimonic

Vous avez également les méthodes Trim , TrimEnd et TrimStart de la classe System.String La méthode trim supprime les espaces (avec quelques décalages Unicode) des parties en début et en fin de la chaîne, tout en vous permettant de spécifier en option les caractères à supprimer.

#Note there are spaces at the beginning and end
Write-Host " ! This is a test string !%^ "
 ! This is a test string !%^
#Strips standard whitespace
Write-Host " ! This is a test string !%^ ".Trim()
! This is a test string !%^
#Strips the characters I specified
Write-Host " ! This is a test string !%^ ".Trim('!',' ')
This is a test string !%^
#Now removing ^ as well
Write-Host " ! This is a test string !%^ ".Trim('!',' ','^')
This is a test string !%
Write-Host " ! This is a test string !%^ ".Trim('!',' ','^','%')
This is a test string
#Powershell even casts strings to character arrays for you
Write-Host " ! This is a test string !%^ ".Trim('! ^%')
This is a test string

TrimStart et TrimEnd fonctionnent de la même manière, ne coupant que le début ou la fin de la chaîne.

4
StephenP

Vous pouvez utiliser:

$answer.replace(' ' , '')

ou

$answer -replace " ", ""

si vous souhaitez supprimer tous les espaces, vous pouvez utiliser:

$answer -replace "\s", ""
1
Lee

Si la chaîne est 

$STR = 'HELLO WORLD'

et vous voulez supprimer l'espace vide entre 'HELLO' et 'WORLD'

$STR.replace(' ','')

replace prend la chaîne et remplace l'espace blanc par une chaîne vide (de longueur 0), autrement dit, l'espace blanc est simplement supprimé.

0
Abs