2016-03-15 75 views
2

我正在使用方法从不同的csv文件中选择记录,我想知道如何创建一个空行为像csv文件的变量。对于实施例...实例化空csv变量

空数组将$array = @()

空哈希表将是$hashTable = @{}

一个非空的CSV对象将是$csvFileRecords = Import-Csv $someFileName

空CSV对象将是????

语法是什么?

+0

有作为“CSV对象”没有这样的事 - '导入/ ConvertFrom-Csv'实例一些'在CSV使用数据构建了性能psobject's文件。术语中的“空csv对象”与空数组无法区分 –

回答

1

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

$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

是的,当你用'import-csv'导入的数组中的项迭代(使用'%{}'或'foreach-object {}')时,'$ _'将引用一个'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或者空白没有ETS适配器。

这里有一些这方面的更多阅读:https://blogs.msdn.microsoft.com/besidethepoint/2011/11/22/psobject-and-the-adapted-and-extended-type-systems-ats-and-ets/