добавление разных данных в конец каждой строки в CSV-файле - PullRequest
0 голосов
/ 10 января 2020

Мне нужно добавить текст в конец заголовка в текстовом / CSV-файле, а затем добавить другой текст (дата) в конце каждой строки под заголовком. Добавление текстовой части работает нормально, но это экспорт в CSV, который работает не так, как ожидалось.

Ожидаемый вывод: (жирный текст - добавленный текст);
"Имя папки", "Файлы" , "Папки", "Размер", "Комментарий" , "ReportDate"
"\\ server \ share \ folder", "2,029,756", "819,527", "1,785,490,958,735", "" , "1/10/2020"

Вместо этого я получаю;
"Длина"
"61"
"74"
"88"
"118"

$Path = "C:\temp\"
$files = Get-ChildItem $Path -filter '*.csv'
ForEach ($file in $files)
{
    $datetmp = $file.PSChildName.Substring(0,10)
    $datetmp = $datetmp.split("_")
    $date = $datetmp[1] + "/" + $datetmp[2] + "/" + $datetmp[0]

    $Fullpath = $Path + $file

    [System.Collections.ArrayList]$content = Get-Content $Fullpath #| %{"$_," + $date}
    $rptinsert = @()

    for ($i=0; $i -lt ($content.Count); $i++)
    {
        if ($i -eq 0)
        {
            $rptinsert += $content[$i] + ",""ReportDate"""
        }
        else
        {
            $rptinsert += $content[$i] + ",`"$date`""
        }
    }


    $Report = $Path + $file.PSChildName.Substring(0, 10) + "-FileSizes2.csv"
    $rptinsert | Export-Csv -path $Report -Encoding ascii -NoTypeInformation
    }

Я уверен, что есть некоторые более короткие методы для выполнения некоторых из моих строк, но сейчас я этого не ищу. ; -)

1 Ответ

2 голосов
/ 10 января 2020

Чтобы использовать Export-Csv так, как вы ожидаете, вам нужно вводить объекты парами свойство / значение. Вы трубите в струнах. Единственное свойство, которое имеет строка, это Length. Я бы использовал Import-Csv для чтения файлов, изменения возвращаемых значений, а затем Export-Csv для вывода измененных объектов. Ниже приведен план, который будет работать:

$Path = "C:\temp\"
$files = Get-ChildItem $Path -filter '*.csv'
Foreach ($file in $files) {
    $datetmp = $file.Name.Substring(0,10).Split('_')
    $date = $datetmp[1],$datetmp[2],$datetmp[0] -join '/'
    $content = Import-Csv $file | Add-Member -MemberType NoteProperty -Name 'ReportDate' -Value $date -PassThru
    $content | Export-Csv -Path ($Path + $file.Name.Substring(0, 10) + "-FileSizes2.csv") -NoType
}

Вывод Import-Csv представляет собой набор пользовательских объектов с именами свойств, которые соответствуют строке заголовка файла CSV. Поскольку кажется , вы хотите, чтобы к каждой строке CSV-файла добавлялось одно и то же значение, вы можете просто запустить одну команду Add-Member . Если каждая строка требует отдельного значения, вам нужно будет l oop через каждую строку и выполнить команду Add-Member.

Add-Member позволяет добавлять различные типы элементов к объекту. В вашем случае вы хотите добавить тип NoteProperty со значением.

После завершения обновления содержимого одного CSV вы можете направить эти результаты в Export-Csv . -NoType запрещает вывод дополнительной строки заголовка с информацией о типе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...