下面仅是一个示例,我已经看到很多脚本可以将.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 += $_
  }
}

10-07 20:52