【发布时间】:2015-08-17 20:44:38
【问题描述】:
我有一个格式如下的文本文件:
.....
ENTRY,PartNumber1,,,
FIELD,IntCode,123456
...
FIELD,MFRPartNumber,ABC123,,,
...
FIELD,XPARTNUMBER,ABC123
...
FIELD,InternalPartNumber,3214567
...
ENTRY,PartNumber2,,,
...
...
... 表示这些字段之间还有其他数据。 唯一我可以确定的是,以ENTRY 开头的字段是一组新记录。以FIELD 开头的行可以是任意顺序,并不是所有的行都可能出现在每组数据中。
- 我需要读入一大块数据
- 搜索与 字符串 ABC123
- 如果找到 ABC123,则搜索是否存在
InternalPartNumber字段并返回该行数据。
我还没有看到一种使用Get-Content 的方法,它可以将可变数量的行作为一组读取并能够搜索它。
这是我目前拥有的代码,它将读取一个文件,搜索一个字符串并用另一个替换它。我希望可以修改它以在这种情况下使用。
$ftype = "*.txt"
$fnames = gci -Path $filefolder1 -Filter $ftype -Recurse|% {$_.FullName}
$mfgPartlist = Import-Csv -Path "C:\test\mfrPartList.csv"
foreach ($file in $fnames) {
$contents = Get-Content -Path $file
foreach ($partnbr in $mfgPartlist) {
$oldString = $mfgPartlist.OldValue
$newString = $mfgPartlist.NewValue
if (Select-String -Path $file -SimpleMatch $oldString -Debug -Quiet) {
$stringData = $contents -imatch $oldString
$stringData = $stringData -replace "[\n\r]","|"
foreach ($dataline in $stringData) {
$file +"|"+$stringData+"|"+$oldString+"|"+$newString|Out-File "C:\test\Datachanges.txt" -Width 2000 -Append
}
$contents = $contents -replace $oldString $newString
Set-Content -Path $file -Value $contents
}
}
}
有没有办法使用 Powershell 读取和搜索“块”中的文本文件?还是进行预读并确定要搜索的内容?
【问题讨论】:
-
这个文件有多大?
-
你用的是什么版本的powershell?
Get-Host -
使用 Powershell 3.0。此外 - 文件大小从 2-3k 到大约 150k 不等。 Ballpark 估计是 100k 文件大小 = 2000 行文本。多个文件夹和子文件夹中有数百个文件。
标签: powershell csv search text