Вопрос:

Out-GridView показывает пустой столбец, где есть фактические данные

powershell import-csv

418 просмотра

2 ответа

701 Репутация автора

У меня есть этот файл CSV.

Фактические данные CSV ограничены знаком ";" , как это:

[2017-04-27 15:45:04] ;x;/x;Succes;

Вы можете видеть, что есть столбец «Terminaison», который содержит информацию об успехе или неудаче. Моя цель - отобразить все столбцы файла в Gridview.

Я делаю :

import-csv "C:\x\Journal\Capsule\CapsulePoste.csv" -Delimiter ";"

и получите желаемый результат со всеми столбцами, содержащими правильные данные:

Теперь вот мой вопрос: когда я хочу отобразить все это в GridView, столбец "terminaison" пуст? Зачем? Все остальные столбцы отображаются правильно ... :

import-csv "C:\x\Journal\Capsule\CapsulePoste.csv" -Delimiter ";" | out-gridview

Я обнаружил, что пустое пространство в конце заголовка (первая строка файла CSV) вызывает это ...

Date;Trousse;Version;Demandeur;Action;Paramètres;Terminaison 

(сразу после Terminaison есть пробел)

Если я редактирую CSV в блокноте и удаляю это пустое место, бинго, это работает. Однако это не решает мою проблему, так как я не хочу редактировать файл заранее. Что это за странное ограничение и есть ли обходной путь?


РЕДАКТИРОВАТЬ:

Ответы, представленные ниже, отличные. Я закончил тем, что использовал другую опцию, которую я считаю, стоит добавить к возможностям:

$content = Get-Content C:\x\Journal\Capsule\CapsulePoste.csv 
$content | Foreach {$_.TrimEnd()} | Set-Content C:\x\Journal\Capsule\CapsulePoste.csv
import-csv "C:\x\Journal\Capsule\CapsulePoste.csv" -Delimiter ";"| sort-object Date -descending
Автор: Rakha Источник Размещён: 09.01.2018 03:02

Ответы (2)


6 плюса

7806 Репутация автора

Как я упоминал в комментариях, есть ошибка,Out-GridView которая отображает пустые значения, когда в начале или конце свойства есть пробел или специальный символ. Я не знаю, как исправить ошибку с пробелами, но вы могли бы исправить файл перед преобразованием из CSV следующим образом:

(Get-Content "C:\X\Capsule\CapsulePoste.csv") -replace 'Terminaison ','Terminaison' |
    ConvertFrom-CSV -Delimiter ";" |
    Out-GridView

Примечание: как заявили Мэтт и Марк, ответ Марка более обобщенный. Это быстрое исправление предполагает, что Terminaisonзаголовок должен быть исправлен и не найден нигде в документе.

Автор: BenH Размещён: 09.01.2018 03:16

3 плюса

15938 Репутация автора

Решение

Вот общий способ исправить это после того, как вы импортировали CSV:

$CSV = import-csv "C:\x\Capsule\CapsulePoste.csv" -Delimiter ";"

$FixedObject = $CSV | ForEach-Object {
    $NewObject = New-Object -TypeName PSCustomObject
    $_.PSObject.Properties | ForEach-Object { $NewObject | Add-Member -Name $_.Name.Trim() -Value $_.Value -MemberType $_.MemberType }

    $NewObject
}

$FixedObject | Out-GridView

При этом выполняется перебор свойств каждого из результирующих объектов, а затем создается новый объект с теми же свойствами, но с методом .Trim (), запускаемым по имени каждого из них для удаления любых окружающих пробелов.

Это, очевидно, менее эффективно, чем просто исправить файл CSV перед импортом, но сделать это (в общем) также может быть сложно, если вы не можете быть уверены, где в CSV появляется заголовок (так как он не всегда первый).

Конечно, если вы просто хотите исправить этот конкретный сценарий, другой ответ является самым простым.

Автор: Mark Wragg Размещён: 09.01.2018 03:27
Вопросы из категории :
32x32