如何将值从哈希表转换为不同的列?

时间:2015-03-30 15:12:40

标签: string excel powershell hash hashtable

我是Power Shell的新手,所以我很难理解用于某个操作的命令。

问题:我有一个哈希表,其中每个参数在一个字符串中可以有4个不同的单词,组成字段VALUE。例如:

$table:

Name                    Value
-----                   --------
parameter 1             F15 STK15                                                                                                                                                             
parameter 2             STK15
parameter 3             GP F15 STK15

如您所见,该表有3个参数,每个参数值是一个STRING,可由3个不同的单词组成:STK F15和GP。

我真正需要的是将这个哈希表导出到4个不同的列中的EXCEL:

NAME    GP   STK15    F15

所以在EXCEL中会有4列:

NAME          GP    STK15    F15
parameter1    NULL  STK15    F15
and so on.

我不知道怎么做,用|管道out-GridView或者其他什么。

如果我可以将字符串分成3列,那就已经很完美了。有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

$table = @{parameter1="F15 STK15";parameter2="STK15";parameter3="GP F15 STK15"}
$outArray = @()

foreach($entry in $table.GetEnumerator()) {
   $o = new-object PSCustomObject
   $o | Add-Member -notepropertyName "NAME" -notepropertyvalue $entry.name
   "F15","STK15","GP" | % { 
      if($entry.Value -match $_) {
        $o | Add-Member -notepropertyname "$_" -notepropertyvalue "$_"
      }
      else {
        $o | Add-Member -notepropertyname "$_" -notepropertyvalue "NULL"
      }
    }  
    $outArray += ,$o
}   

遍历表并检查您尝试识别的每个数据的匹配项。为哈希表中的每个值创建一个自定义对象,并使用名称,所需数据以及每个数据是否匹配来填充它。然后将对象附加到数组。

然后您有一个对象:

[PS] > $outArray | ft -auto

NAME       F15  STK15 GP
----       ---  ----- --
parameter2 NULL STK15 NULL
parameter1 F15  STK15 NULL
parameter3 F15  STK15 GP

您可以将其转换为csv格式以导出到Excel;

[PS] > $outArray | sort -Property NAME | ConvertTo-Csv -NoTypeInformation
"NAME","F15","STK15","GP"
"parameter1","F15","STK15","NULL"
"parameter2","NULL","STK15","NULL"
"parameter3","F15","STK15","GP"