【问题标题】:How to transform values from a Hash Table to a different columns?如何将哈希表中的值转换为不同的列?
【发布时间】:2015-06-03 16:22:36
【问题描述】:

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

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

$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 列,那就完美了。有人可以帮我吗?

【问题讨论】:

  • $table.'parameter 1' 让您可以访问其值,因此它将返回字符串 "F15 STK15"
  • 你已经尝试过了吗?
  • 我知道,如何获得价值。我需要将值拆分为 3 列假设我有参数 1.value = "AAA BBB CCC" 我需要将 "AAA BBB CCC" 拆分为 3 个不同的列并将其发送到 EXCEL(在 3 个不同的列中)

标签: string excel powershell hash hashtable


【解决方案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"

【讨论】:

  • 太棒了!如果您觉得有帮助,请Accept the Answer
  • 最后一件事,如何将其发送到 4 列中的 excel 中?
  • 不确定您的意思?格式目前为 4 列。将其通过管道传输到| Out-File cmdlet 以将其保存到磁盘,然后在 Excel 中打开 csv
  • 将它传送到 |out-file 会创建一个文件,该文件只有一列,第一个单元格中包含:“parameter1”、“F15”、“STK15”、“NULL”。到目前为止,无法找到如何将其拆分为 4 列。
  • 您需要将其作为 csv 文件打开 - 选择 , 作为分隔符。如果您将其保存为whatever.csv Excel 应该会自动执行此操作
猜你喜欢
  • 2011-05-02
  • 2015-10-27
  • 1970-01-01
  • 2012-11-11
  • 2021-11-01
  • 1970-01-01
  • 2015-04-19
  • 2018-04-05
  • 1970-01-01
相关资源
最近更新 更多