如何在CSV中获取标题的价值

时间:2014-09-10 11:35:36

标签: powershell csv sharepoint-2010

在PowerShell中,我想将CSV文件中的标题名称传递给PowerShell脚本中的另一个函数。

如何将标题名称的值文本检索到CSV中的变量?

e.g。如果我有以下CSV数据:

ID Name     Country
-- ----     -------
1  John     United States
2  Beatrice Germany
3  Jouni    Finland
4  Marcel   France

在上面的示例中,如何将Country列值文本检索为" Country"在我的脚本中将文本转换为变量?

(注意:我熟悉符号$ _。国家通过在Powershell中导入CSV从一行中检索"德国"的值)

我的具体问题是目前我的脚本中有以下功能:

function GetItemIdFromTitle([string]$LookupTitle, [ref]$LookupId)
{   
    $LookupField = $LookupList.Fields["DEPTCATEGORY"]   
    $LookupItem = $LookupList.Items | where {$_['DEPTCATEGORY'] -like "*$LookupTitle*"} 
    $LookupId.Value = $LookupItem.ID
}

目前这是一个字符串值 - > $ LookupTitle并使用它来查找SharePoint列表中的项目。正如您在脚本中看到的那样,我在列名中硬编码为" DEPTCATEGORY"。这是将在SharePoint列表中查找的列名称。

不是硬编码列名,而是要传递相应$ LookupTitle值的列名,并替换硬编码" DEPTCATEGORY"。

我调用上述函数如下:

#GET THE LOOKUP COLUMN ID       
GetItemIdFromTitle $_.DEPTCAT ([ref]$LookupIdValue)

($ _。DEPTCAT是CSV列中行的值。)

我可以做点什么吗

$myCountryColumnName = $_.Country.Property.Title 

$myCategoryColumnName = $_.DEPTCAT.Property.Name

从CSV获取列名?

6 个答案:

答案 0 :(得分:16)

如果$ obj中有对象,则可以列出所有属性标题:

$obj | Get-member -MemberType 'NoteProperty' | Select-Object -ExpandProperty 'Name'

这是一个数组,所以你可以像这样单独引用它们:

($obj | Get-member -MemberType 'NoteProperty' | Select-Object -ExpandProperty 'Name')[0]

这只会为您提供第一个属性的名称。

答案 1 :(得分:7)

要从csv获取列名,首先,将列标题的名称放入一个数组中(如果需要,这也允许您循环遍历每一列)...

$inFilePath = "C:\path\to\file.csv"
$csvColumnNames = (Get-Content $inFilePath | Select-Object -First 1).Split(",")

...,其次,按列位置索引数组(索引从0开始)。鉴于你的原始例子,它将是;

$myCountryColumnName = $csvColumnNames[2]

答案 2 :(得分:6)

假设您已使用Import-CSV读取了CSV,则可以检查生成的对象的属性。与this answer类似,但维护结果数组中的列顺序

检查第一行/元素

$data = import-csv $path
$data[0].psobject.properties.name

因此第二行将返回属性的字符串数组。

答案 3 :(得分:1)

这更像是一般性评论而不是答案。

我需要从CSV中提取第一个列标题名称,然后开始从Get-Member中选择NoteProperty字段。这不起作用,因为NoteProperty列标题名称的顺序可能与CSV文件中列标题的顺序不匹配。

futureSPQR的方法每次都会有效,因为文本不会重新排序。下面是我获取第一个列标题名称的方法的单行版本。

((Get-Content filename.csv)[0] -split(','))[0]

答案 4 :(得分:0)

$f = Import-Csv "...csv"

Get-Member -InputObject $f[0] |
  Where-Object {$_.MemberType -eq "NoteProperty"} |
  select-object Name

答案 5 :(得分:0)

如果您要检查数组中是否存在标头名称,请使用以下代码

$Array | Get-member -MemberType 'NoteProperty'| where {$_.Name -eq "ColumnName"}