【问题标题】:Powershell: Read csv and create hashtable, then use data in hashtable to do calculation?Powershell:读取csv并创建hashtable,然后使用hashtable中的数据进行计算?
【发布时间】:2016-04-10 10:25:45
【问题描述】:

我有一个包含下表的 CSV 文件

 Name    X      Y     Z
 Al      50    1900   15
 Steel   30    5700   15

基本上,以“名称”开头的行是标题行。我想首先在 powershell 中读取这个 CSV 并创建一个哈希表。之后,我需要从哈希表中读取数据并进行简单的计算。例如,如果我使用$Hashtable.Al,那么我可以得到X,Y,Z 的值。下面的等式可以是$Q = $X+$Y+$Z,这样我就可以得到$Q的答案。 ($Hashtable.Steel应该以同样的方式工作。)

    #Read CSV and Create the hashtable

    #Read data -X Y Z from hashtable by using
    $Al = $Hashtable.Al

    #Do a simple calculation
    $Q = $Al.X + $Al.Y + $Al.Z
    $Q

【问题讨论】:

  • 所以$Hashtable.Al 应该为CSV 中的对应行返回一个包含XYZ 值的数组?
  • 我们不会为您编写代码。如果您不确定如何操作,请查看它。您已经有了与 cmets 一起描述的计划。搜索它们中的每一个,你就会得到你需要的东西。如果您遇到特定问题,请在此处提问,我们将尽力提供帮助。提示:Import-CSV。此外,如果您要对每个对象(行:Al、Steel 等)进行相同的计算,我会使用数组而不是哈希表。
  • @MathiasR.Jessen 是的,你是对的。我刚刚更新了我的描述。我想用 X,Y,Z 的值来做计算。
  • @FrodeF。我现在可以读取 CSV 文件,但只能读取两个标题,NameX$t = Import-Csv -Path 'C:\Users\Shuai\Desktop\CSV\Database.csv' -Header "Name", "x", "Y", "Z" $Hashtable = @{ } Foreach ($r in $t) { Write-Host $r.Name $r.X $r.Y $r.Z $Hashtable.Add($r.Name, $r.X, $r.Y, $r.Z) }
  • 您需要将对象(import-csv 为每一行创建的)添加到哈希表,而不是单个值。您可以稍后使用您存储的对象中的属性访问它们。

标签: csv powershell


【解决方案1】:

假设Name 值对于每一行都是唯一的,这非常简单:

# Create hashtable
$HashTable = @{}

# Import CSV
$CSV = Import-Csv .\Path\To\Csv\File.csv

# Iterate over the CSV rows and populate the hashtable:
$CSV |ForEach-Object { $HashTable[$_.Name] = $_ }

如果您想确保$HashTable 中包含的对象 具有XYZ 属性,请在分配它们时使用Select-Object

$CSV |ForEach-Object { $HashTable[$_.Name] = $_ |Select-Object X,Y,Z }

【讨论】:

    【解决方案2】:

    我知道这个话题很老了,但是我正在研究它来解决一些问题。 我有一个相当大的 CVS 文件(100,000 行,大约 20 列),需要 2 列存储在哈希中以供进一步处理。 使用 measure-object 计时,我发现 Get-Content 比 import-csv 获取数据要快几个数量级。 使用字符串数组中的数据设置散列也比迭代生成的 CSV 对象更快。 我在代码中测试了这两种场景,并在比较苹果和苹果时反复发现结果是一致的。

    【讨论】:

      猜你喜欢
      • 2016-04-24
      • 2016-06-17
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-02
      • 2016-07-25
      相关资源
      最近更新 更多