在 PowerShell 中一次一行地操作字符串
string manipulation one row at time in PowerShell
我有一大段文字需要处理,一次处理一行。我现在的做法是将数据发送到一个文本文件(如以下代码所示),然后导入回一个变量,这样我就可以使用 foreach 构造。我敢肯定有比这更好的方法。我感谢任何帮助。
$rawData = '
This is a multiline text1
This is a multiline text2
This is a multiline text3
This is a multiline text4
'
$rawData | Out-File c:\temp.txt -Force
$DataFromFile = Get-Content c:\temp.txt
foreach ($i in $DataFromFile) {
$i
}
直接拆分:
foreach ($row in $rawData -split '\r?\n') {
$row
}
或手动提取以避免创建临时数组:
$pos = 0
do {
# exract the next line
$i = $rawData.indexOfAny("`r`n", $pos)
if ($i -eq -1) { $i = $rawData.length }
$row = $rawData.substring($pos, $i - $pos)
while ($rawData[$i+1] -match "[\r\n]") { $i++ }
$pos = $i + 1
#process the line
$row
} until ($pos -ge $rawData.length)
也使用文字引号来避免字符串中出现空行:
$rawData = @'
This is a multiline text1
This is a multiline text2
This is a multiline text3
This is a multiline text4
'@
我有一大段文字需要处理,一次处理一行。我现在的做法是将数据发送到一个文本文件(如以下代码所示),然后导入回一个变量,这样我就可以使用 foreach 构造。我敢肯定有比这更好的方法。我感谢任何帮助。
$rawData = '
This is a multiline text1
This is a multiline text2
This is a multiline text3
This is a multiline text4
'
$rawData | Out-File c:\temp.txt -Force
$DataFromFile = Get-Content c:\temp.txt
foreach ($i in $DataFromFile) {
$i
}
直接拆分:
foreach ($row in $rawData -split '\r?\n') {
$row
}
或手动提取以避免创建临时数组:
$pos = 0
do {
# exract the next line
$i = $rawData.indexOfAny("`r`n", $pos)
if ($i -eq -1) { $i = $rawData.length }
$row = $rawData.substring($pos, $i - $pos)
while ($rawData[$i+1] -match "[\r\n]") { $i++ }
$pos = $i + 1
#process the line
$row
} until ($pos -ge $rawData.length)
也使用文字引号来避免字符串中出现空行:
$rawData = @'
This is a multiline text1
This is a multiline text2
This is a multiline text3
This is a multiline text4
'@