长单行文件的 Powershell 内存不足异常
Powershell out of memory exception on long single line file
我的问题是我必须拆分一个只有 1 行但很长的文件。我试着 运行
(cat $filename).split("'")
但它给了我一个内存不足的异常。有没有一种方法可以浏览文件,它不会尝试一次加载所有文件,所以我可以拆分单行。作为参考,相关文件大小为 46MB。
几年前我在处理大文件时遇到过类似的问题。假设 none 个单独的字符串超过了大小限制,这应该有效:
$InputFileName = 'C:\Temp\Temp.txt'
$StreamReader = New-Object System.IO.StreamReader($InputFileName, [System.Text.Encoding]::ASCII)
$Queue = New-Object System.Collections.Generic.Queue[char]
[string[]]$Array = @()
while ($StreamReader.EndOfStream -ne $True)
{
$CurrentChar = $StreamReader.Read()
if ($CurrentChar -eq [char]"'")
{
[string]$Element = ''
while ($Queue.Count -gt 0)
{
$Element += $Queue.Dequeue()
}
$Array += $Element
}
else
{
$Queue.Enqueue($CurrentChar)
}
}
$StreamReader.Close()
这会创建一个先进先出 (FIFO) 集合,让您的角色排队,直到遇到 '
。然后将排队的字符读出到一个字符串中,该字符串被添加到数组中。
我的问题是我必须拆分一个只有 1 行但很长的文件。我试着 运行
(cat $filename).split("'")
但它给了我一个内存不足的异常。有没有一种方法可以浏览文件,它不会尝试一次加载所有文件,所以我可以拆分单行。作为参考,相关文件大小为 46MB。
几年前我在处理大文件时遇到过类似的问题。假设 none 个单独的字符串超过了大小限制,这应该有效:
$InputFileName = 'C:\Temp\Temp.txt'
$StreamReader = New-Object System.IO.StreamReader($InputFileName, [System.Text.Encoding]::ASCII)
$Queue = New-Object System.Collections.Generic.Queue[char]
[string[]]$Array = @()
while ($StreamReader.EndOfStream -ne $True)
{
$CurrentChar = $StreamReader.Read()
if ($CurrentChar -eq [char]"'")
{
[string]$Element = ''
while ($Queue.Count -gt 0)
{
$Element += $Queue.Dequeue()
}
$Array += $Element
}
else
{
$Queue.Enqueue($CurrentChar)
}
}
$StreamReader.Close()
这会创建一个先进先出 (FIFO) 集合,让您的角色排队,直到遇到 '
。然后将排队的字符读出到一个字符串中,该字符串被添加到数组中。