【发布时间】:2019-03-17 09:39:45
【问题描述】:
我陷入了以下情况:
我必须从 CSV 文件中获取信息。我使用 Import-Csv 导入了 CSV。
我的原始数据如下所示:
45227;01.10.2018 03:24:00;Xxxx Xxxx Xxxxx x XX xxxxxxxxxxxxxx Xxxxx xxx Xxxxxxxxxxxxxxxxxxx;;3;XXXX;XXXX;XXX@XX.com;;;3.7;;
其中包含3.7 的列是感兴趣的值(“积分”)。
这是我的第一个问题 --> 使用Import-Csv,powershell 会将这些信息保存在[string] 属性中。为了避免这种情况,我使用了以下行:
| Select @{Name="Points";Expression={[decimal]$_.Points}}
现在我得到了一个 Selected.System.Management.Automation.PSCustomObject 类型的对象,其中包含该属性作为 [decimal]。现在我想总结一下同一个电子邮件地址使用的所有要点:
$Data[$Index].Points += (
$Imported_CSV | where {$_.Sender -eq $Imported_CSV_Unique.Sender} |
measure Points -sum
).Sum
这似乎工作得很好,但如果我打开 $Data[$Index] | gm 我得到这个:Points NoteProperty double Points=71301.6000000006
属性更改为[double]。我挖了一下,发现Powershell的GenericMeasureInfo.Sum属性只能返回一个Nullable<Double>实例作为属性值。
似乎我正在产生[double] 的溢出,因为显示的数字完全错误。我想坚持使用小数或整数,所以我有一个像 71123.4 或类似的输出。
有没有其他方法,所以我不必使用(Measure-Object -sum).Sum?
提前致谢!
【问题讨论】:
-
请更具体一点。在示例 CSV 中,也向我们展示了标题。您的代码中的
$Imported_CSV_Unique.Sender来自哪里?你不能简单地做类似[decimal]$sum = 0; $yourData | ForEach-Object { $sum += $_.Points}的事情吗?
标签: powershell csv sum measure-object