Powershell可以在哈希表中存储csv头和值

时间:2017-08-30 09:29:24

标签: powershell csv

是否可以将哈希表中的整个CSV文件数据作为标题存储为标题,将各个值存储为值对?

我希望这用于在SQL表中推送正确的数据。

示例csv文件:

id,fname,lname,shift,day,night
1,ert,sdf,08/21/2017 Day,2,-
2,wer,asdf,08/21/2017 Day,-,1
3,rty,adsf,08/21/2017 Day,1,-
4,yui,adsf,08/21/2017 Day,-,-
5,qwe,asdf,08/21/2017 Day,-,-
6,ret,asdf,08/21/2017 Day,-,-
7,chh,asdf,08/21/2017 Day,-,-
8,sdf,cxvv,08/21/2017 Day,1,-

我想访问值,所以我可以遍历键,例如:

id => 1
fname => ert
lname => sdf
shift => 08/21/2017 Day
day => 2
night => -
id => 2
fname => wer
lname => asdf
shift => 08/21/2017 Day
day => -
night => 1
...
So on

2 个答案:

答案 0 :(得分:2)

您是否尝试过Import-Csv Cmdlet

>  $csvData=Import-Csv example.csv

>  $csvData[0]

id    : 1
fname : ert
lname : sdf
shift : 08/21/2017 Day
day   : 2
night : -

>  $csvData[0].shift

08/21/2017 Day

>  $csvData.length

8

所以有效密钥是0..7

编辑:循环键

$keys = $csvData[0].psobject.properties | % { ,@( $_.name ) }

$csvData[0].($keys[0])

$keys | %{ echo "$_ => $($csvData[0].$_)" }

0..7 |%{ $i=$_; $keys |%{ echo "$i,$_ => $($csvData[$i].$_)" } }

答案 1 :(得分:1)

根据Nahuel的回答,循环浏览项目的键如下:

$csvData = Import-CSV data.csv

foreach ($element in $csvData) {
    Write-Host "Element:"
    $element.Keys | ForEach-Object {Write-Host "`t$($_) => $($element[$_])"}
}