首页 > 解决方案 > 使用 powershell 替换 csv 文件列中的值 <0 和 >50

问题描述

极端新手在这里。

我有一个 csv 文件,它在名为 QOH 的列中显示库存可用性。我正在尝试编写一个powershell脚本将QOH列中的所有负值更改为0,并将任何50或更大的值更改为= 50。例如:如果 QOH = -3 ,替换为 0。如果 QOH = 39,则什么都不做,如果 QOH = 78 替换为 50。

任何代码帮助都会很棒

对于这个例子,我们会说 csv 文件位于 C:\TEMP 列标题是:SKU,QOH,AVAIL,RRP,BC_id,Group,UPC

这是使 <0 变为 = 0 的尝试。(我还没有得到 >50 的任何东西)

这不起作用,因为 QOH 列中的所有内容现在都为 0。

$Path = "C\TEMP\test.csv"
(Import-CSV -Path $Path) | select-object SKU,QOH,AVAIL,RRP,BC_id,Group,UPC | 
ForEach-Object {
    if ([float]$_.QOH -le 0) {
        $_.QOH = '0'
    } Else {
    $_.QOH = $_.QOH
    }
    $_
} | Export-CSV -Path $Path -NoTypeInformation

标签: windowsexport-to-csvpowershell-4.0

解决方案


不确定你是否找到了答案,所以我还是把它扔在那里。

我要指出的一件事是您不需要将 0 设置为 0 或将 $ .​​QOH 设置为 $ .QOH。基本上,只有那些小于 0 或大于 50 的会被改变——其余的都没有改变。

$text = @'
QOH,prop1,prop2
-3,data1,data2
-180,data3,data4
0,data5,data6
28,data7,data8
50,data9,data10
79,data11,data12
'@

$Text | convertfrom-csv | foreach {
    if([float]$_.QOH -lt 0){$_.QOH = 0}
    elseif([float]$_.QOH -gt 50){$_.QOH = 50}
    $_
}

我只是放了一些样本数据来说明清楚。这是输出

QOH prop1  prop2 
--- -----  ----- 
  0 data1  data2 
  0 data3  data4 
  0 data5  data6 
 28 data7  data8 
 50 data9  data10
 50 data11 data12

推荐阅读