【问题标题】:Split large CSV into multiple files small csv by group name and maintain output format按组名将大 CSV 拆分为多个文件小 csv 并保持输出格式
【发布时间】:2018-11-29 07:26:25
【问题描述】:

我是一名打印机管理员,我会导出许多打印报告。报告以大 CSV 格式导出。我设法按组名拆分了 CSV,内容还可以,但输出格式不一样。

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

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

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

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

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

【问题讨论】:

  • 我忘了提到我需要这个输出是这样的,因为在我得到报告后,我也在 powershell 中创建了一个带有表格的 html 报告。这就是为什么与原始输出相同非常重要的原因。非常感谢
  • 如果您编辑帖子并将其放入帖子本身,您在评论中提供的附加信息会更有价值。
  • 如果你想让你的坏报告看起来像你的好报告,为什么不试试这个-... Where-Object {$_.cGroupName -eq $group.name} | % { if ($_ -match "\d+") {$_ -replace ('"', '')}} | ConvertTo-csv -NoTypeInformation ...
  • 什么是问题?引用的值仍然有效!
  • 正如 gvee 所提到的,CSV 中的值周围的双引号是完全有效的,应该由任何适当的 CSV 导入程序自动删除。请说明您认为需要删除它们的原因。

标签: powershell csv split output


【解决方案1】:

这个问题已经解决了。

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

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

我有很好的分组报告,并且没有“。”的输出相同。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-27
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多