为文件中的每一行提取一个子字符串

问题描述 投票:0回答:2

使用 Powershell,我只是尝试从任何以 6 开头的记录的第 37 个位置开始提取 15 个字符。我想循环遍历并为每个实例生成一条记录,以便稍后将其放入输出文件中。但我似乎没有使用正确的语法只是为了返回 15 个字符,我知道我遗漏了一些明显的东西。从事这个已经有一段时间了。这是我的脚本:

$content = Get-Content -Path .\tmfhsyst*.txt | Where-Object { $_.StartsWith("6") }

foreach ($line in $contents) 
{
  $val102 = $line.substring(36,15)
}

write-output $val102
powershell foreach substring
2个回答
0
投票

正如 Bill_Stewart 指出的那样,您需要将

Write-Output
行移到 ForEach 循环内。一个可能更好的方法就是通过管道传输它:

Get-Content -Path .\tmfhsyst*.txt | Where-Object { $_.StartsWith("6") } | foreach{$_.substring(36,15)}

这应该会给你你想要的输出。


0
投票

使用

Substring()
的缺点是,如果字符串短于起始索引 + 子字符串长度,则会引发错误。您可以通过正则表达式匹配来避免这种情况:

(Get-Content -Path .\tmfhsyst*.txt) -match '^6.{35}(.{15})' | % { $matches[1] }
© www.soinside.com 2019 - 2024. All rights reserved.