это довольно хрупко в том смысле, что в нем жестко закодировано количество строк на запись. тем не менее, он работает с вашим набором данных. [ ухмылка ] я подозреваю, что тщательно написанное регулярное выражение сделает работу быстрее, но я не смог придумать такое.
# fake reading in a text file
# in real life, use "Get-Content"
$InStuff = @'
name,address
John Doe,"123 Easy Way
Apt. 10
Somewhere, USA"
Jane Doe,"456 Main St
Unit 5
SomewhereElse, USA"
'@ -split [environment]::NewLine
$CleanedInStuff = foreach ($Index in 0..$InStuff.GetUpperBound(0))
{
if ($Index -eq 0)
{
$InStuff[$Index]
continue
}
if (-not [string]::IsNullOrEmpty($InStuff[$Index]))
{
($InStuff[$Index..($Index + 2)]) -join ', '
$InStuff[$Index + 1] = ''
$InStuff[$Index + 2] = ''
}
}
$FromCSV = $CleanedInStuff |
ConvertFrom-Csv
$FromCSV |
Export-Csv -LiteralPath "$env:TEMP\Hobadee.csv" -NoTypeInformation
'=' * 40
$CleanedInStuff
'=' * 40
$FromCSV
на экране вывода ...
========================================
name,address
John Doe,"123 Easy Way, Apt. 10, Somewhere, USA"
Jane Doe,"456 Main St, Unit 5, SomewhereElse, USA"
========================================
name address
---- -------
John Doe 123 Easy Way, Apt. 10, Somewhere, USA
Jane Doe 456 Main St, Unit 5, SomewhereElse, USA
Содержимое файла CSV ...
"name","address"
"John Doe","123 Easy Way, Apt. 10, Somewhere, USA"
"Jane Doe","456 Main St, Unit 5, SomewhereElse, USA"