【问题标题】:Powershell .split and append while keeping split formatPowershell .split 并在保持拆分格式的同时追加
【发布时间】:2017-05-14 04:04:51
【问题描述】:

您好,我的问题是如何保持已运行 .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 方法,因为它似乎会减慢我正在处理的脚本的速度,该脚本需要拆分文本并在小端追加超过 500k 次。

【问题讨论】:

  • $splittest+$abc 产生一个数组,$abc+$splittest 产生一个字符串 - 你对哪个感兴趣?
  • 我想要一个字符串
  • @($test2;$splittest) -join [Environment]::NewLine$OFS = [Environment]::NewLine;$test2+$splittest
  • 谢谢你这是工作并将所有内容都保存为字符串

标签: string powershell split


【解决方案1】:

您看到的是 PowerShell 的运算符重载解析的效果。

当 PowerShell 看到+ 时,它需要确定+ 在给定上下文中是指求和(1 + 1 = 2)、连接(1 + 1 = "11")还是加(1 + 1 = [1,1])。

它通过查看左侧参数的 type 来实现,并尝试将右侧参数转换为所选运算符重载所期望的类型。

当您按照需要的顺序使用+ 时,字符串值在左侧,因此会导致字符串连接操作。

有多种方法可以将字符串添加到现有数组中:

# 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

【讨论】:

    猜你喜欢
    • 2014-02-24
    • 1970-01-01
    • 2021-01-19
    • 2017-02-10
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多