【发布时间】:2015-12-23 08:29:03
【问题描述】:
我正在从共享点下载 xlsx 文件,然后将其转换为 csv 文件。但是,由于 xlsx 文件包含未删除的空列,因此它将这些列导出到 csv 文件,如下所示...
columnOne,columnTwo,columnThree,,,,
valueOne,,,,,,
,valueTwo,,,,,
,,valueThree,,,,
如您所见,Import-Csv cmdlet 将因该文件而失败,因为存在额外的空标题。我想知道如何计算末尾多余的逗号。列的数量一直在变化,列的名称也一直在变化。所以我们从最后一个非空标题号开始计数。
现在,我正在做以下事情......
$csvFileEdited = Get-Content $csvFile
$csvFileEdited[0] = $csvFileEdited[0].TrimEnd(',')
$csvFileEdited | Set-Content "$csvFile-temp"
Move-Item "$csvFile-temp" $csvFile -Force
Write-Host "Trim Complete."
这将使文件输出像这样......
columnOne,columnTwo,columnThree
valueOne,,,,,,
,valueTwo,,,,,
,,valueThree,,,,
Import-Csv 现在接受命名,但正如您所见,仍有多余的空值不是必需的,因为它们对于每一行都是空的。
如果我执行以下代码...
$csvFileWithExtraCommas = Get-Content $csvFile
$csvFileWithoutExtraCommas = @()
FOrEach ($line in $csvFileWithExtraCommas)
{
$line = $line.TrimEnd(',')
$csvFileWithoutExtraCommas += $line
{
$csvFileWithoutExtraCommas | Set-Content "$csvFile-temp"
Move-Item "$csvFile-temp" $csvFile -Force
Write-Host "Trim Complete."
然后它将删除一个应该为 null 的 null 值,因为它属于非 null 标题名称。这就是输出......
columnOne,columnTwo,columnThree
valueOne
,valueTwo
,,valueThree
这是所需的输出:
columnOne,columnTwo,columnThree
valueOne,,
,valueTwo,
,,valueThree
有人可以帮忙吗?
更新
我正在使用以下代码来计算额外的空标题...
$csvFileWithCommas = Get-Content $csvFile
[int]$csvFileWithExtraCommasNumber = $csvFileWithCommas[0].Length
$csvFileTitlesWithoutExtraCommas = $csvFileWithCommas[0].TrimEnd(',')
[int]$csvFileWithoutExtraCommasNumber = $csvFileTitlesWithoutExtraCommas.Length
$numOfCommas = $csvFileWithExtraCommasNumber - $csvFileWithoutExtraCommasNumber
$numOfCommas 的值的输出是4。现在的问题是我怎样才能使用 $line.TrimEnd(',') 只这样做 4 次??
【问题讨论】:
-
@SemihOzmen 据我所知,OP 表现出了努力和相当不错的 MCVE。