gpt4 book ai didi

PowerShell - 将属性名称从 Pascal 大小写转换为带下划线的大写

转载 作者:行者123 更新时间:2023-12-04 22:54:51 26 4
gpt4 key购买 nike

假设我有一个这样的对象:

$test = @{
ThisIsTheFirstColumn = "ValueInFirstColumn";
ThisIsTheSecondColumn = "ValueInSecondColumn"
}

我想结束:
$test = @{
THIS_IS_THE_FIRST_COLUMN = "ValueInFirstColumn";
THIS_IS_THE_SECOND_COLUMN = "ValueInSecondColumn"
}

无需手动编码新列名称。

这向我展示了我想要的值:
$test.PsObject.Properties | where-object { $_.Name -eq "Keys" } | select -expand value | foreach{ ($_.substring(0,1).toupper() + $_.substring(1) -creplace '[^\p{Ll}\s]', '_$&').Trim("_").ToUpper()} | Out-Host

这导致:
THIS_IS_THE_FIRST_COLUMN
THIS_IS_THE_SECOND_COLUMN

但现在我似乎无法弄清楚如何将这些新值分配回对象。

最佳答案

您可以修改哈希表 $test安排如下:

foreach($key in @($test.Keys)) { # !! @(...) is required - see below.
$value = $test[$key] # save value
$test.Remove($key) # remove old entry
# Recreate the entry with the transformed name.
$test[($key -creplace '(?<!^)\p{Lu}', '_$&').ToUpper()] = $value
}
@($test.Keys)从现有的哈希表键创建一个数组; @(...)确保将 key 集合复制到静态数组中,因为使用 .Keys属性直接在修改相同哈希表的循环中会中断。

循环体保存手头输入键的值,然后删除其旧名称下的条目。 [1]

然后使用所需的名称转换在其新键名称下重新创建条目:
$key -creplace '(?<!^)\p{Lu}匹配给定键中的每个大写字母( \p{Lu} ),除了字符串的开头( (?<!^) ),并将其替换为 _后跟那个字母( _$& );将结果转换为大写( .ToUpper() )会产生所需的名称。

[1] 在添加重命名条目之前删除旧条目避免了诸如 Simplest 之类的单个单词名称的问题。 ,其转换后的名称, SIMPLEST , 被认为是同名,因为 PowerShell 中的哈希值不区分大小写。因此,为条目 SIMPLEST 赋值而条目 Simplest仍然存在实际上针对现有条目,以及后续 $test.Remove($key)然后将简单地删除该条目,而无需添加新条目。
尖顶到 JosefZ为了指出问题。

关于PowerShell - 将属性名称从 Pascal 大小写转换为带下划线的大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53822910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com