【发布时间】:2019-09-19 23:28:19
【问题描述】:
我正在尝试让 PowerShell 来操作一些 CSV 数据。
我试图在我的 CSV 中操作的列包含作为文本的库存水平,主要包含“高”、“好”、“中”、“低”和“缺货”,我想将它们转换为在一天结束时将 CSV 导入网站之前的数字格式。
我目前的代码是:
#Declare Stock Level Words To Value
$StockLevelWordToValue = @{
"High" = "70"
"Good" = "50"
"Medium" = "30"
"Low" = "10"
"Out Of Stock" = "0"
}
# import the CSV file
$csv = Import-Csv "C:\temp\temp.csv";
# for each row, replace the Stock Level Word field with a value
foreach($row in $csv) {
$row."Stock Level" = $StockLevelWordToValue[$row."Stock Level"];
}
# export the modified CSV
$csv | Export-Csv "C:\temp\temp2.csv" -NoTypeInformation;
我遇到的问题是在我的“库存水平”列中,其中一些条目类似于“良好:2019 年 8 月最后更新”或“高:2019 年 3 月最后更新”
目前,运行此代码时,这些条目没有返回值,单元格为空白。
我希望通配符可以像这样工作:
"Good*" = "50"
但这也会返回一个空白单元格。
如何检查一个单元格“包含”一个单词并返回一个数值,无论该单元格中还有什么其他单词?
【问题讨论】:
-
你有一个好的开始。 [grin] 但是,您不能将通配符与查找表 [hashtables] 一起使用。相反,解析您的 CSV 列值以将其修剪回仅键。看起来您可以使用
.Split(':')[0].Trim()来获取与您的查找键值匹配的部分。 -
谢谢李,这就是我所做的(有点)。因此,我意识到,如果我将字符长度缩短,我最终可以得到 5 个库存级别列的一致值。我已将其缩减为 3 个字符,因此我以“Hig”、“Goo”、“Med”、“Low”或“Out”结尾——那么之后添加的任何日期都无关紧要。然后运行上述脚本将其更改为等效值。
-
neato!很高兴知道你让它按需要工作了……[grin]
标签: powershell csv wildcard