У меня есть CSV с разделителями табуляции, которые нужно разбить на отдельные CSV для каждой строки, причем имя файла [FirstName] [LastName] .csv.PowerShell: экспортируйте каждую строку CSV в отдельный файл
Кроме того, мне нужно манипулировать некоторыми данными, в частности удалять тире из SSN.
Образец Содержание
FirstName LastName SSN
========= ========= ======
Albert Abernathy 111-11-1111
Billy Barty 222-22-2222
Chris Canton 333-33-3333
Желаемая выход (Filename | CSV Content)
Albert Abernathy.csv | Albert Abernathy 111111111
Billy Barty.csv | Billy Barty 222222222
Chris Canton.csv | Chris Canton 333333333
Вот что я до сих пор.
$csvFile = "C:\Test\List.csv"
$folderPath = Split-Path -Parent $csvFile
$csv = Import-Csv -Path $csvFile -Delimiter "`t"
| Where-Object {$_.LastName -ne ""} ##Prevent importing blank lines
| Foreach-Object {$_.SSN -Replace "-","" } ##Remove dashes from SSN
foreach ($line in $csv)
{ $saveName = $line.FirstName + " " + $line.LastName + ".csv"
Export-Csv -Delimiter "`t" -Path $folderPath\$saveName
}
До сих пор все это выполнялось, но оно просто приостанавливается после заключительной статьи и ничего не происходит. Как я мощеную это вместе с поиска Google, я уверен, мой синтаксис нужно работать, так что я был бы признателен, если кто-то может мне точку в правильном направлении
--Update--
Кредит на alroc для указания меня в правильном направлении и mjolinor для предоставления неоценимого синтаксиса REPLACE, который я больше не мог найти. Вот мой окончательный сценарий.
$csvFile = "C:\Test\List.csv"
$folderPath = Split-Path -Parent $csvFile
### filter out blank records and delete dashes from SSN ###
(Get-Content $csvFile |
Select-Object |
Where-Object {$_.LastName -ne ""}) | #Rows with non-blank last name
Foreach-Object {$_ -Replace '(\d{3})-(\d{2})-(\d{4})','$1$2$3'} |
Set-Content $csvFile
### import csv data and export file for each row ###
$csv = Import-Csv -Path $csvFile -Delimiter "`t"
foreach ($row in $csv) {
$outPath = Join-Path -Path $folderPath -ChildPath $($row.FirstName + " " + $row.LastName + ".csv");
$row | Select-Object |
ConvertTo-Csv -NoTypeInformation -Delimiter "`t" |
Foreach-Object {$_.Replace('"','')} | #Delete quotes around each "cell"
Out-File $outPath
(Get-Content $outPath |
Select-Object -Skip 1) | #Delete header
Set-Content $outPath
}
Оба они работали как рекламируемые. Любой способ избежать указания каждого столбца на выходе? Фактический сценарий имеет около 60 столбцов. – Matt
Используя ConvertTo-CSV, Out-File и Replace, зажатые между ними, я смог вывести файл без кавычек. http://social.technet.microsoft.com/Forums/windowsserver/en-US/f6b610b6-bfb2-4140-9529-e61ad30b8927/how-to-export-csv-without-doublequote?forum=winserverpowershell – Matt
($ record | select-object ConvertTo-Csv -NoTypeInformation -Delimiter "' t ") [1] .replace ('"', '') -replace '(\ d {3}) - (\ d {2}) - (\ d {4}) ',' $ 1 $ 2 $ 3 '| Out-File $ OutFileName – mjolinor