【发布时间】: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