我正在尝试根据第一列中的值将 CSV 分成 2 个。新创建的 CSV 不能有列名,这就是问题所在。当我删除标题时,所有值都进入第一列。
为了根据第一列值拆分 CSV,我必须分配标题。使用正确的值成功创建了 2 个新文件,但是我的最后一步是删除标题,因为用于处理 CSV 的应用程序将不接受列名。
删除标题后,所有值不再以逗号分隔,因此都在第一列中。我怎样才能解决这个问题?
if (!(Test-Path X:)) {
$net = New-Object -comobject Wscript.Network
$net.MapNetworkDrive("X:","**Path**")
}
$file = Get-ChildItem -Path "**Path**" | Where-Object {
$_.LastWriteTime -gt (Get-Date).AddHours(-10) -and
$_.Name -like '*.CSV*'
}
if ($file) {
$filename = $file.FullName
$date = (Get-Date).ToString("yyyyMMdd")
$ExportPathJUO = "**Path**$date"
$ExportPathWDA = "**Path**$date"
##Create Seperate Files in Staging Folder
$csv = Import-Csv $filename -Header A,B,C,D,E,F,G
$IDS = $csv | select -ExpandProperty A -Unique
foreach ($ID in $IDS) {
$csv | where {
$_.A -like '*0000009*'
} | Export-Csv $ExportPathJUO -NoTypeInformation
}
foreach ($ID in $IDS) {
$csv | where {
$_.A -like '*0000007*'
} | Export-Csv $ExportPathWDA -NoTypeInformation
}
##Remove Headers
(Get-content $ExportPathJUO) |
select -Skip 1 |
Out-File -FilePath $ExportPathJUO -Force
(Get-content $ExportPathWDA) |
select -Skip 1 |
Out-File -FilePath $ExportPathWDA -Force
}
*-Csv
如果您的 CSV 中没有/不需要标题,请不要使用cmdlet。你想要的可以这样做:
foreach (line in Get-Content $filename) {
$a = $line.Split(',')[0]
switch -wildcard ($a) {
'*0000007*' { $line | Add-Content $ExportPathWDA }
'*0000009*' { $line | Add-Content $ExportPathJUO }
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句