下面仅是一个示例,我已经看到很多脚本可以将.CSV文件分解为较小的文件,但仍在为此工作。
我们如何使用PowerShell,找到ALPH指示的 header 接下每一行,到达ALPT(含端点)时停止,然后将此文本放到另一个文件中。
该操作将需要贯穿整个文件,并且ALPD或ALPC行的数量将有所不同。
ALPH可被视为 header ,而包含的信息则是必需的,因为某些字段值可能不同。唯一的常数是ALPH和ALPT。
ALPH;8102014
ALPC;PK
ALPD;50
ALPD;40
ALPT;5
ALPH;15102014
ALPC;PK
ALPD;50
ALPD;50
ALPD;70
ALPD;70
ALPD;71
ALPD;72
ALPD;40
ALPT;6
ALPH;15102014
ALPC;PK
ALPD;50
ALPD;50
ALPD;40
ALPT;6
最佳答案
这是使用开关的一种方法。您的原始文件在C:\temp\ALPH.CSV
中,这是我想象的找到开始和结束的方式。
$n = 1
switch -File 'C:\temp\ALPH.CSV' -Regex
{
'^ALPH.*' {
Write-Host "Begin $n"
}
'^ALPT.*' {
Write-Host "End $n"
$n++
}
}
现在将行保存到var中并导出文件:
$n = 1
$csvTmp = @()
switch -File 'C:\temp\ALPH.CSV' -Regex
{
'^ALPH.*' {
Write-Host "Begin $n"
$csvTmp += $_
}
'^ALPT.*' {
Write-Host "End $n"
$csvTmp += $_
$csvTmp | Set-Content "c:\temp\file$n.csv"
$csvTmp = @()
$n++
}
default {
$csvTmp += $_
}
}