2016-03-15 3 views
2

Я использую методы для выбора записей из разных файлов csv, и я хочу знать, как создать пустую переменную, которая будет действовать как файл csv. Для примера ...Создавать пустую переменную csv

пустой массив будет $array = @()

пустой хэш-таблица будет $hashTable = @{}

непустой объект CSV будет $csvFileRecords = Import-Csv $someFileName

пустой объект CSV будет ????

Каким будет синтаксис?

+0

Там нет такого понятия, как «объект CSV» - 'Импорт/ConvertFrom-Csv' конкретизирует ряд' psobject's со свойствами построены с использованием данных в формате CSV файл. «Пустой объект csv» в вашей терминологии будет неотличим от пустого массива –

ответ

1

«Объект CSV» на самом деле представляет собой массив (psobject).

$csvFileRecords = @() 

Для добавления новых записей в массив, вам просто нужно добавить psobject с с соответствующими атрибутами, соответствующих требуемым колоннами. Один из способов создания psobject с желаемыми свойствами - из хеш-таблицы.

$obj = new-object psobject -property @{fname="Fiddle";lname="Freak"} 
$csvFileRecords += $obj 
+0

Что делать, если я хотел добавить запись в массив следующим образом? 'import-csv $ csvFile | % {If ($ recordFound) {$ record = $ _}} '. Для '$ record', я бы просто сделал' $ csvFileRecords + = $ record'? –

+0

Да, когда вы итерации (используя '% {}' или 'foreach-object {}') через элементы в массиве, который вы импортировали с помощью 'import-csv', тогда' $ _' будет ссылаться на один «psobject», который вы можете легко добавить в другой массив, используя '+ ='. Следующая строка будет работать: '$ csvFileRecords = @(); import-csv $ csvFile | % {If ($ recordFound) {$ csvFileRecords + = $ _}} '(предполагая, что вы замените' $ recordFound' допустимым условным). – Thriggle

1

Ну, CSV не может создано от $ нулевой, но вы могли бы сделать что-то вроде этого:

PS C:\> New-Object -TypeName System.Object | ConvertTo-Csv 
#TYPE System.Object 

Но ваша задача состоит в том, что это не работает взад и вперед. Например:

PS U:\> ((New-Object -TypeName System.Int32) | ConvertTo-Csv).GetType() 
IsPublic IsSerial Name          BaseType                     
-------- -------- ----          -------- 
True  True  String         System.Object  

означает, что выход из ConvertTo-CSV не является нулевым, но это показывает, где вы потеряли трубопровод:

PS U:\> ((New-Object -TypeName System.Int32) | ConvertTo-Csv | ConvertFrom-csv).GetType() 
You cannot call a method on a null-valued expression. 
At line:1 char:1 
+ ((New-Object -TypeName System.Int32) | ConvertTo-Csv | ConvertFrom-c ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

помощь говорит:

Inputs 
    System.Management.Automation.PSObject 
    You can pipe any object that has an Extended Type System (ETS) adapter to ConvertTo-CSV. 

Итак, я уверен, ваша проблема в том, что $ null или blank не имеет адаптера ETS.

Вот еще некоторые чтение по этому вопросу: https://blogs.msdn.microsoft.com/besidethepoint/2011/11/22/psobject-and-the-adapted-and-extended-type-systems-ats-and-ets/

Смежные вопросы