gpt4 book ai didi

powershell - 通过动态变量名称获取变量

转载 作者:行者123 更新时间:2023-12-02 23:16:01 25 4
gpt4 key购买 nike

如何使用动态便笺属性名称访问从CSV文件导入的数据?也就是说,事先不知道名称。它们确实与模式匹配,并且在脚本运行时从CSV文件中提取。

例如,考虑一个CSV文件:

"Header 1","Header A","Header 3","Header B"
0,0,0,0
1,2,3,4
5,6,7,8

我只想提取以字母结尾的列。为此,我阅读标题行并使用正则表达式提取名称,如下所示:
$reader = new-object IO.StreamReader("C:\tmp\data.csv")
$line = $reader.ReadLine()
$headers = @()

$line.Split(",") | % {
$m = [regex]::match($_, '("Header [A-Z]")')
if($m.Success) { $headers += $m.value } }

这将获得我关心的所有列名称:
"Header A"
"Header B"

现在,要访问CSV文件,我将其导入为
$csvData = import-csv "C:\tmp\data.csv"

Import-CSV将创建一个自定义对象,该对象具有与标题行相同的属性。可以像这样通过NoteProperty名称访问字段,
$csvData | % { $_."Header A" } # Works fine

显然,这需要事先知道列名称。我想使用提取并存储到 $headers中的colunn名称。我该怎么办?

到目前为止我已经尝试过的一些事情
$csvData | % { $_.$headers[0] } # Error: Cannot index into a null array.
$csvData | % { $np = $headers[0]; $_.$np } # Doesn't print anything.
$csvData | % { $_.$($headers[0]) } # Doesn't print anything.

我可以像这样更改脚本,以便它将编写另一个知道列名的脚本。那是我唯一的解决方案吗?

最佳答案

我想到的第一件事(也是唯一的一个...对不起)是:

$csvData | % { $_.$(( $csvData | gm | ? { $_.membertype -eq "noteproperty"} )[0].name) }

用于获取第一个的列值和
$csvData | % { $_.$(( $csvData | gm | ? { $_.membertype -eq "noteproperty"} )[1].name) }

对于第二列,依此类推...

这是您需要的吗?

关于powershell - 通过动态变量名称获取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8525481/

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