按组名将大CSV拆分为多个小CSV文件,并保持输出格式

时间:2018-06-20 08:18:27

标签: powershell csv split output

我正在以打印机管理员的身份工作,并且我导出了许多打印报告。该报告以大CSV格式导出。我设法按组名拆分了CSV,内容还可以,但是没有保持相同的输出格式。

所以有这个主文件,我像这样按组划分。

How I split

这是一份很好的报告,很好导出:

Good report

如果看到的话,它的格式包含",,但只在需要的地方包含。

当我分割CSV时,请使用以下命令:

$fullpath = ".\Todos los dep_abr 24_mayo23_2018.csv"

$path = Split-Path $fullpath -Parent
$data = Import-Csv -Path $fullpath -Header "cGroupID", "cGroupIDBillable",
        "cGroupName", "cGroupDescription", "cRowName", "cRowDescription",
        "cRowID", "cDepartment", "cUnits", "cBWPages", "cColourPages",
        "cAmount", "cAltCost", "cJobs", "cBillable", "cLocation",
        "cBreakColumn"

foreach ($group in $data | Group cGroupName) {
    $data | Where-Object {$_.cGroupName -eq $group.name} |
        ConvertTo-csv -NoTypeInformation |
        Out-File -Encoding utf8 ".\TODOS LOS DEP24_ABR_23_MAYO_18\DEP\$($group.name).csv"
}

文件输出是这样的,错误的报告:

bad report

如果您知道一个按组划分的命令将保持主文件中的输出格式,请您帮我。

我忘了提到我需要这样的输出,因为在获得报告后,我还使用powershell中的表创建了html报告。这就是为什么与原始输出相同的输出非常重要。非常感谢

双引号“仅需存在于所需的位置,如良好的代码中所示。如果您观看良好的报告,则仅存在于少数位置。”

如果报告不正确,则html表将生成错误。

非常感谢您。


更新:

我找到了一个需要的脚本,可以将输出保存在大文件中,但可以按大小进行拆分,而不是像我自己的脚本那样按组进行拆分。我该如何根据自己的需要进行修改。

$src = ".\Informe 3 meses actividad detallada usuarios.csv"
$SplitPath = ".\Informe 3 meses actividad detallada usuarios - {0}.csv"

$inData = New-Object -TypeName System.IO.StreamReader -ArgumentList $src
$header = $inData.ReadLine()
$outData = New-Object -TypeName System.Text.StringBuilder
[void]$outData.Append($header)
$i = 0

while ( $line = $inData.ReadLine() ) {
    if ( $outData.Length -gt 200MB ) {
        $outData.ToString() | Out-File -FilePath ( $SplitPath -f $i ) -Encoding utf8
        $outData = New-Object -TypeName System.Text.StringBuilder
        [void]$outData.Append($header)
        $i++
    }
    Write-Verbose "$currentFile, $line"
    [void]$outData.Append("`r`n$($line)")
}

$outData.ToString() | Out-File -FilePath ( $SplitPath -f $i ) -Encoding utf8

这很好用,但是它是按大小而不是按组划分的,输出正确。请帮助。

1 个答案:

答案 0 :(得分:0)

此问题已解决。

我结合了剧本。首先,我使用了拆分大文件的脚本,该脚本用于解决问题中出现的大文件。

作为脚本,可以很好地拆分,但按大小划分,在脚本结束后,我使用我的脚本来取出组,并且可以正常工作。

我按组有好的报告,并且输出相同,但没有“。

为了记录,我也检查了html格式,并且即使定界符为“”,该报告也不会起作用。这就是为什么我需要准确地作为好报告,输出。

我希望这里的人能在一个Powershell中帮助我解决它。但是似乎没人知道,一种无需格式化输出即可拆分的方法。好吧,没问题。

感谢大家的支持。你是一个伟大的团队。还要感谢stackoverflow。