【发布时间】:2021-08-07 01:38:50
【问题描述】:
我正在将一系列文本文件读入哈希表,以便在脚本中引用它们。文本文件的格式很好,可以作为名称/值对。 文本文件格式为:
a b
c d
e f
g h
其中 'a, c, e, g' 是键,'b,d,f,h' 是值...除了超过 1000 行。
例如,我已经成功地在我的文件名的一部分之后命名了一个空哈希表:
$FileName = 'testName' #example
$hashName = new-variable -Name $FileName -Value @{}
参考。堆栈溢出文章Calling/Setting a variable with a variable in the name
我现在有一个名为 testName 的空哈希表。但是,我无法通过变量 $hashName 添加到 testName。
"$hashName".Add(1,2)
失败,因为 [System.String] 不包含名为“Add”的方法。
$hashName.Add(1,2)
失败,因为 [System.Management.Automation.PSVariable] 不包含名为“Add”的方法。 (有道理)
请注意 $testName.Add(1,2) 工作得很好,但这对我没有好处,因为我想循环访问从多个文件中提取的 $testName 的几个变量喜欢阅读。
【问题讨论】:
-
New-Variable创建了您要求的变量:$testName.Add(1,2)。动态命名变量的目的是什么?您想要实现的目标是$hashTable = @{}无法实现的? -
如果您想为每个文件创建一个哈希表,您可以使用“主”哈希表来存储所有这些 - 例如
$allHashes = @{}; foreach( $filename in $filenames ) { $fileHashtable = @{ ... }; $allHashes.Add($filename, $fileHashTable) }。然后,您可以使用$allHashes[$FileName]访问“文件哈希表”或遍历键以处理每个“文件哈希表”。 -
@MathiasR.Jessen - 你说得对,
$hashTable = @{}在生成空哈希表时效果相当好(并且也很简洁)。失败在于填充由此生成的哈希表。我应该在我的问题中更明确。 -
好的,那么当您尝试填充它时会发生什么?
$hashTable.Add('key', 'value')或$hashTable['key'] = 'value'会抛出错误吗? -
@MathiasR.Jessen - 如原始问题所述, $hashTable.Add('key','value') 抛出错误 [System.Management.Automation.PSVariable] 不包含方法命名为“添加”。
标签: powershell hashtable