Этот сценарий powershell берет до 8 строк в файле csv и объединяет их в одну строку, дублируя столбцы, а затем сохраняя их в файле результатов (первый файл результатов сохраняется нормально). Если в csv есть 16 строк, то это означает, что нужно сохранить второй файл результатов и т. Д. c.
, например, в rows.csv:
first_field second_field 3rd_field 2nd_field
мяч летучая мышь ракетка клуб
оранжевый банан человек go груша
В результате1.csv:
первый1 второй1 третий1 четвертый1 первый2 второй2 третий2 четвертый2
мяч летучая мышь рэкет-клуб оранжевый банан человек go груша
Я получаю сообщение об ошибке:
New-Object : Cannot convert 'System.Object[]' to the type 'System.Collections.IDictionary' required by parameter 'Property'. Specified method is not supported.
At C:csv.ps1:19 char:42
+ $results = New-Object PSObject -Property $details
+ ~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-Object], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.NewObjectCommand
Обратите внимание, что первое создание нового объекта работало нормально в строке 16. В PowerShell ISE, если я перезапущу Сценарий это ошибки в строке 16 тоже. Я понятия не имею, что здесь не так, но предположим, что мне нужно уничтожить PSObject после сохранения каждого файла CSV?
$csvObjects = import-csv C:\rows.csv
$results = @()
$counter=1
foreach ($item in $csvObjects){
$detailsnew = [ordered] @{
"first$counter" = $item.'First_field'
"second$counter" = $item.'Second_field'
"third$counter" = $item.'Third_field'
"fourth$counter" = $item.'Fourth_field'
}
$details += $detailsnew
# modulus comparison returns remainder - write out file every 8
if ($counter % 8 -eq 0) {
if ($counter -eq 8) {
#works on line below on first run but fails on subsequent runs within Powershell ISE
$results = New-Object PSObject -Property $details
}
if ($counter -eq 16) {
# fails on line below
$results2 = New-Object PSObject -Property $details
}
$quotient = $counter / 8
$results | export-csv -Path c:\result"$quotient".csv -noType
$details = @()
$results = @()
}
$counter++
}
#write out final file if number not divisible by 8
if (-not($counter % 8 -eq 0)) {
$results += New-Object PSObjectF -Property $details
$modulo = $counter % 8
$quotient_plus1 = (($counter-$modulo) / 8) +1
$results | export-csv -Path C:\result"$quotient_plus1".csv -noType
}