首页 > 解决方案 > 按组名将大 CSV 拆分为多个文件小 csv 并保持输出格式

问题描述

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

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

我如何分裂

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

好报告

如果您看到,它有一种格式,其中包含"and ,,但仅在需要的地方。

当我拆分 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"
}

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

坏报告

如果您知道一个命令,可以在按组拆分时保持主文件中的输出格式,请您帮助我。

我忘了提到我需要这个输出是这样的,因为在我得到报告后,我也在 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

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

标签: powershellcsvsplitoutput

解决方案


这个问题就解决了。

我结合到脚本。首先,我使用了拆分大文件的脚本,即问题中的大文件。

作为脚本,拆分良好,但按大小划分,在脚本结束后,我使用我的脚本取出组并且它起作用了。

我有很好的分组报告,并且没有“。

作为记录,我还检查了 html 格式,并且即使分隔符是 '"',此报告的 " 也不起作用。这就是为什么我需要准确地作为好的报告,输出。

我希望这里有人帮助我解决它,只需一个 powershell。但似乎没有人知道,一种在不格式化输出的情况下进行拆分的方法。好吧没问题。

谢谢大家的建议。你是一个伟大的团队。也感谢stackoverflow。


推荐阅读