2016-12-29 59 views
1

你好,我的問題是我如何保持一個字符串的格式,它已經運行了.split。我想Powershell .split和追加同時保持拆分格式

$test="a.b.c.d.e" 
$test2="abc" 
#split test 
#append split to test2 
#desired output 
abc 
a 
b 
c 
d 
e 

我知道如果我在一個字符串進行拆分,如

$test="a.b.c.d.e" 
$splittest=$test.split(".") 
$splittest 
#output 
a 
b 
c 
d 
e 

但是當我試圖讓這個我想上述拆分追加到一個字符串

$test2="abc" 
$test2+$splittest 
#output 
abca b c d e 

$splittest+$abc 
#output 
a 
b 
c 
d 
e 
abc 

有沒有辦法將分割字符串附加到另一個字符串,同時保持此拆分格式,或者我將不得不通過分割字符串foreach循環,並將其附加到$ test2字符串逐一。

foreach ($line in $splittest) 
{ 
$test2="$($test2)`n$(splittest)" 
} 

我寧願因爲它似乎慢下來的腳本我在這工作不使用foreach方法需要的文字對小端進行分割和上面附加了50萬次。

+0

'$ splittest + $ abc'產生一個數組,'$ ABC + $ splittest'產生一個字符串 - 這你有興趣嗎? –

+0

我想要一個字符串 – Adlis

+4

'@($ test2; $ splittest)-join [Environment] :: NewLine'或'$ OFS = [Environment] :: NewLine; $ test2 + $ splittest' –

回答

2

您所看到的是PowerShell的操作符重載分辨率的影響。

在PowerShell中看到+,它需要決定是否+和手段(1 + 1 = 2),串聯(1 + 1 = "11"),或在給定的情況下添加(1 + 1 = [1,1])。

它通過查看左側參數的類型並嘗試將右側參數轉換爲所選運算符超載所期望的類型。

當您按照需要的順序使用+時,字符串值位於左側,因此會導致字符串連接操作。

有前面加上字符串現有陣列的多種方式:

# Convert scalar to array before + 
$newarray = @($abc) + $splittest 

# Flatten items inside an array subexpression 
$newarray = @($abc;$splittest) 

現在,所有你需要做的就是通過一個換行符加入字符串:

$newarray -join [System.Environment]::NewLine 

或者你也可以改變輸出字段分隔符($OFS)添加到換行符,並將其隱式加入:

$OFS = [System.Environment]::NewLine 
"$newarray" 

最後,你可以管陣列Out-String,但將一個換行符添加到整個字符串:

@($abc;$splittest) |Out-String 
相關問題