Использование подстановочного знака для замены содержимого ячейки CSV на PowerShell - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь заставить 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 года» или «Высокий уровень: последнее обновление марта 2019 года»

В настоящее время, когдапри выполнении этого кода не возвращается значение для этих записей, и ячейка пуста.

Я надеялся, что подстановочный знак будет работать так:

"Good*" = "50"

Но это также возвращает пустую ячейку.

Как проверить, что ячейка "содержит" слово и возвращает числовое значение, независимо от того, какие другие слова находятся в этой ячейке?

1 Ответ

0 голосов
/ 23 сентября 2019

Вы можете использовать Select-String для проверки значения вашего атрибута с помощью таких шаблонов, как «Высокий *».Это вернет ноль, если не найдет, true, если есть строка, соответствующая этому шаблону.

foreach($row in $csv) {
     If ($row."Stock Level" | Select-String "High*) {
          $row."Stock Level" = $StockLevelWordToValue["High"];
    }
  }
...