在 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
'@