gpt4 book ai didi

Powershell - 在 Readline 上使用 Peek 方法是否有好处(虽然不为空)?

转载 作者:行者123 更新时间:2023-12-01 01:39:51 26 4
gpt4 key购买 nike

我一直在使用 Streamreader(和 StreamWriter)编写 PowerShell 脚本,将大文件解析为较小的报告。在搜索将这些东西放在一起的最佳方式时,我发现有两种方法主要用于将内容读取到文件的末尾。

1 - while ($reader.Peek() -ge 0) { $line = $reader.Readline() ... }
2 - while (($line = $read.ReadLine()) -ne $null) { do stuff ... }
从文档来看,它看起来像 Peek将读取下一个值,但不会改变读取器的位置。它看起来像 ReadLine基本上会做同样的事情,但读取整个字符串/行。我觉得这是一个“no-duh”问题 - 在阅读该行之前实际查看一个值真的更有效,还是只是在将阅读器分配给变量之前的额外步骤?

先感谢您!

最佳答案

由于无论如何您都需要线路,我认为没有理由Peek() .如果你真的想检查你是否到了最后,那么 .EndOfStream property无论如何可能会更准确。

As discussed here , .Peek()可以退货-1当错误发生时,而不仅仅是在到达流末尾时。那里的大多数答案还建议避免使用它并仅使用 .ReadLine() .

mklement0还提到使用 System.IO.File.ReadLines .这将返回一个枚举,因此您可以使用路径调用它并像其他枚举一样使用它,而无需一次加载所有行(因此它仍然适用于大文件)。

您可以将它与 foreach 一起使用或与 ForEach-Object , 例如:

foreach ($line in ([System.IO.File]::ReadLines('path\to\file'))) {
$line
}


[System.IO.File]::ReadLines('path\to\file') | ForEach-Object -Process {
$_
}

$reader = [System.IO.File]::ReadLines('path\to\file')

foreach ($line in $reader) { $line }
$reader | ForEach-Object -Process { $_ }

关于Powershell - 在 Readline 上使用 Peek 方法是否有好处(虽然不为空)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59534020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com