Powershell 实例化空csv变量

Powershell 实例化空csv变量,powershell,powershell-3.0,Powershell,Powershell 3.0,我正在使用各种方法从不同的csv文件中选取记录,我想知道如何创建一个类似csv文件的空变量。例如 空数组应该是$array=@() 空哈希表应该是$hashTable=@{} 非空csv对象将是$csvFileRecords=Import csv$someFileName 空的csv对象将是?? 语法是什么?一个“CSV对象”实际上只是一个数组(由psobjects组成) 要向该数组添加新记录,只需添加psobjects,其中包含与所需列对应的适当属性。创建具有所需属性的psobject的一种方

我正在使用各种方法从不同的csv文件中选取记录,我想知道如何创建一个类似csv文件的空变量。例如

空数组应该是
$array=@()

空哈希表应该是
$hashTable=@{}

非空csv对象将是
$csvFileRecords=Import csv$someFileName

空的csv对象将是
??

语法是什么?

一个“CSV对象”实际上只是一个数组(由
psobject
s组成)

要向该数组添加新记录,只需添加
psobject
s,其中包含与所需列对应的适当属性。创建具有所需属性的
psobject
的一种方法是从哈希表

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

CSV不能从$null创建,但您可以这样做:

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的输出不为null,但这显示了管道丢失的位置:

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适配器


这里有更多关于这方面的阅读:

没有“csv对象”
Import/convertfromCSV
实例化了大量的
psobject
s,其属性是使用csv文件中的数据构造的。在您的术语中,“空csv对象”与空数组是无法区分的。如果我想向数组中添加如下记录,该怎么办<代码>导入csv$csvFile |%{If($recordFound){$record=${}。对于
$record
,我是否会执行
$csvFileRecords+=$record
?是的,当您(使用
%{}
foreach对象{}
)通过使用
导入csv
导入的数组中的项进行迭代时,
$
将引用单个
psobject
,您可以使用
+=
轻松地将其添加到另一个数组中。下面的行可以工作:
$csvFileRecords=@();导入csv$csvFile |%{If($recordFound){$csvFileRecords+=${}
(假设用有效的条件替换
$recordFound
)。
Inputs
    System.Management.Automation.PSObject
    You can pipe any object that has an Extended Type System (ETS) adapter to ConvertTo-CSV.