2016-05-16 104 views
1

需要您的幫助從我的XML文件中刪除換行符(`r)&換行符(`n)。我越來越的System.OutOfMemoryException錯誤使用Powershell腳本從XML文件中刪除回車和換行

文件的大小:1

輸入文件格式

<File1> 
<SubFile1> </SubFile1> 
<SubFile2> </SubFile2> 
<SubFile3> </SubFile3> 
......... 
<SubFilen> </SubFilen> 
</File1> 

代碼使用

$content = [IO.File]::ReadAllText($input_File) 
$content = $content.Replace("`r","") 
$content = $content.Replace("`n","") 
[system.io.file]::WriteAllText($Output_File,$content) 
:600 MB

線路數量

也試過

Get-Content 

我試着用MaxMemoryPerShellMB 1024,2048,4096但沒有運氣。

+0

'(獲取內容\ file.xml)-join''' –

+0

我沒有得到任何錯誤,如果我從Powershell命令提示符執行它。 'C:\ Temp \ File_Encoding.ps1「input.xml」「output.xml」'當我嘗試執行如下所示的'C:\ Windows \ syswow64 \ Windowspowershell \ v1.0 \ Powershell.exe - noprofile -executionpolicy bypass -File「C:\ Temp \ Change_File_Encoding.ps1」「input.xml」「output.xml」' – Praveen

回答

1

Don Jones有一篇不錯的文章Why Get-Content Ain’t Yer Friend

嘗試使用StreamReader逐行讀取文件,並使用StreamWriter逐行寫入新(臨時)文件。你完成後,只需更換文件:

$streamReader = New-Object System.IO.StreamReader -Arg "yourFile.xml" 
$streamWriter = [System.IO.StreamWriter] "tmp.xml" 

while ($line = $streamReader.ReadLine()) { 
    $replacedLine = $line -replace '`r|`n' 
    $streamWriter.Write($replacedLine); 
} 

$streamReader.close() 
$streamWriter.close() 

Remove-Item "yourFile.xml" -Force 
Rename-Item "tmp.xml" "yourFile.xml" 
+0

WriteLine()引入另一個換行符,擊敗目的 –

+0

當然,感謝提示。他必須使用'Write'來代替 - 解決了我的答案。 –

+0

我仍然遇到同樣的錯誤。遇到錯誤 - 控制權已傳遞到Catch Block 拋出了'System.OutOfMemoryException'類型的異常。 第56行出現錯誤 – Praveen

相關問題