Подсчет строк в файлах CSV и экспорт результатов в CSV - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь подсчитать строки, содержащие значения в куче CSV в папке. Мне удалось получить код для подсчета, но я не могу найти способ экспортировать результаты в CSV. Все, что я получил, это пустой CSV.

Что мне здесь не хватает?

$FOLDER_ROOT = "C:\Test\2019"
$OUTPUT_CSV = "C:\Test\2019\Count.csv"

Get-ChildItem $FOLDER_ROOT -re -in "*.csv" | ForEach-Object {
    $filestats = Get-Content $_.Fullname | Measure-Object -Line
    $linesInFile = $filestats.Lines - 1
    Write-Host "$_,$linesInFile"
} | Export-Csv -Path $OUTPUT_CSV -NoType

Ответы [ 2 ]

3 голосов
/ 09 октября 2019

Есть несколько проблем с вашим кодом:

  • Используйте Get-ChildItem -Filter '*.csv' вместо Get-ChildItem -Include '*.csv'. Первый работает быстрее второго.

  • Write-Host, скорее всего, выводит вывод непосредственно на консоль хоста. Мне сказали, что это было изменено в последних версиях (так что выходные данные хоста переходят в новый информационный поток), но для версий по крайней мере до v5 это все еще реальность.

  • Export-Csv ожидает ввода объекта, поскольку он выводит свойства объектов в виде полей CSV (беря заголовки столбцов из имен свойств первого объекта). Подача строк ("$_,$linesInFile") приведет к CSV, который содержит только столбец "Длина", поскольку это единственное свойство строковых объектов.

Использование вычисляемое свойство для создания CSV с именем файла и количеством строк входных файлов:

Get-ChildItem $FOLDER_ROOT -Recurse -Filter '*.csv' |
    Select-Object Name, @{n='LineCount';e={(Get-Content $_.Fullname | Measure-Object -Line).Lines - 1}} |
    Export-Csv $OUTPUT_CSV -NoType
0 голосов
/ 09 октября 2019

Write-Host пишет только на хост! Скорее всего, вы видите вывод в консоль PowerShell? Используйте Write-Output, который может быть передан в Export-CSV.

...