PowerShell中的字符串操作一行

时间:2017-02-03 14:29:37

标签: powershell-v3.0

我有一个需要处理的大文本,一次一行。我现在的方式是将数据发送到文本文件(如下面的代码所示)并导回到变量中,这允许我使用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 
}

1 个答案:

答案 0 :(得分:1)

直接拆分:

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