相关疑难解决方法(0)

如何在PowerShell中逐行处理文件作为流

我正在使用一些多GB的文本文件,并希望使用PowerShell对它们进行一些流处理.这很简单,只需解析每一行并提取一些数据,然后将其存储在数据库中.

不幸的是,get-content | %{ whatever($_) }似乎在管道的这个阶段保持整个行集在内存中.它的速度也非常慢,需要花费很长时间才能完全阅读.

所以我的问题是两部分:

  1. 如何让它逐行处理流,而不是将整个事物缓存在内存中?我想避免为此目的使用几次RAM.
  2. 如何让它运行得更快?对a get-content进行迭代的PowerShell 似乎比C#脚本慢100倍.

我希望我在这里做一些愚蠢的事情,比如错过一个-LineBufferSize参数或什么......

powershell stream

87
推荐指数
3
解决办法
26万
查看次数

如何读取文本文件中的指定行?

给定一个文本文件,我将如何读取文件中的任意行?

说,我有一个文件test.txt.我如何阅读文件中的第15行?

我所看到的是涉及将整个文本文件存储为String数组然后使用行号的值作为要从数组中使用的String的数量的东西......但是有一些复杂情况:文本文件是巨大的,我正在编写的应用程序的机器并不是一个顶尖的系统.速度不是首要任务,但绝对是一个主要问题.

有没有办法读取文本文件的特定行并将结果存储为字符串?

感谢您的回复:该文件是KINDA结构化的.它有25行信息,然后X号线,但第25行17具有的价值X.

但是,有一个空白行,它作为文件中的第二条记录重复自身,X可以为每条记录赋予不同的值.

我想要做的是读取并存储前25行作为独立值,然后将下一个X(通常约250)行存储为数组.然后我将它存储在SQL数据库中并重复使用NEXT记录,直到我到达第Y条记录(文件中的记录数在第3行)

编辑2:好吧,我想我已经找到了基于你所有人的回应的解决方案.

我将读取前25行并将其存储为数组.我将数组的相关内容复制到局部变量然后我将删除前25行.然后,我可以使用info将下一个X行(数组中的第13项的值)存储为数组,将其序列化,将其存储在数据库中,然后删除我刚刚读取的行.

然后,我可以为每个后续记录重复该过程.

当然,这取决于我正在做的一个假设,说实话,我不确定是否属实.是否有可能从C#中删除文本文件中的前n行而不必读取整个内容并在没有前n行的情况下重写它?

c# string file-io input

53
推荐指数
3
解决办法
20万
查看次数

寻求方法不在Powershell脚本中工作

我正在尝试使用.net API来搜索大型数据文件.出于某种原因,我无法使其发挥作用.这是我的代码:

function check_logs{
  $pos = 8192
  $count = 1
  $path = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG.2'
  $br = 0
  $reader = [System.IO.File]::OpenText($path)
  $reader.DiscardBufferedData()
  $reader.BaseStream.Seek(0, [System.IO.SeekOrigin]::Begin)
    for(;;){
    $line = $reader.ReadLine()
    if($line -ne $null){$br = $br + [System.Text.Encoding]::UTF8.GetByteCount($line)}
    if($line -eq $null -and $count -eq 0){break}
    if($line -eq $null){$count = 0}
    elseif($line.Contains('  Error:')){
        Write-Host "$line  $br"
    }
}
Run Code Online (Sandbox Code Playgroud)

}

如果我使用0作为搜索方法的参数,它会按预期从头开始搜索,但它也会在写入读取行之前将0写入控制台.例:

 0
 2011-08-31 09:26:36.31 Logon       Error: 17187, Severity: 16, State: 1.  4101
 2011-08-31 09:26:36.32 Logon       Error: 17187, Severity: 16, State: 1.  4489
 2011-08-31 09:26:38.25 …
Run Code Online (Sandbox Code Playgroud)

.net powershell file-io seek

3
推荐指数
1
解决办法
2905
查看次数

标签 统计

file-io ×2

powershell ×2

.net ×1

c# ×1

input ×1

seek ×1

stream ×1

string ×1