首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逐行处理HereString

逐行处理HereString
EN

Stack Overflow用户
提问于 2017-01-21 10:57:30
回答 3查看 627关注 0票数 1

我想定义一个HereString,然后逐行使用它。最初,我认为这些线条在HereString中是与生俱来的,所以我可以使用foreach ($line in $hereString),而当这种方法不起作用时,我尝试了Get-Content $hereString。在这两种情况下都没有joy。目标只是处理一些代码,这些代码最终将操作整个文本文件,因此在实现这个过程中,我可以快速转换为使用一个小示例文本文件,但现在我很好奇,HereStrings是否甚至可以逐行工作,而不以某种方式分裂。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-21 13:01:13

由于您的目的是使用它来处理文件,所以我从下面这样的内容开始:

代码语言:javascript
复制
$file = 'c:\testfiles\testfile1.txt'

$textdata = 
@'
Line1
Line2
Line3
'@

$textdata | Set-Content $file

$lines = Get-Content $file

foreach ($line in $lines) {}

现在,您将在生产中使用的相同环境中进行测试,您可以试验不同的I/O方法以及不同的数据解析和操作方法。从性能的角度来看,了解如何做到这一点将变得更加重要,因为所涉及的文件的大小和数量都在上升。

票数 0
EN

Stack Overflow用户

发布于 2017-01-21 11:54:09

作为PetSerAl建议,最简单的解决方案可能是使用运算符

代码语言:javascript
复制
foreach($line in $herestring -split '\r?\n')
{
    # process $line here    
}

使用模式\r?\n将匹配\r\n (Windows样式换行符)和\n (Unix样式换行符)。

票数 2
EN

Stack Overflow用户

发布于 2017-01-22 02:07:40

请注意,“拆分”和“ForEach”都会导致在开始处理之前首先解析整个文件。如果文件非常大,则在开始处理之前会出现延迟,并且内存可能会引起关注。

另一种选择来自.NET,以极端的形式出现.

代码语言:javascript
复制
$rdr = new-object System.IO.StreamReader('c:\path\to\file.txt')
while (!$rdr.EndOfStream) {
    $line = $rdr.ReadLine()
    ## do processing on the line ##

}

在上面,每次调用StreamReader的StreamReader方法时,它都会前进到下一行。上面的内容是最有效的,如果发现文件中不喜欢的东西,您就有机会提前爆发。

您可以查看StreamReader在这里的细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41778508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档