Поиск значения в CSV-файле и сравнение с сегодняшней датой - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь получить значение из файла CSV.

Если сегодняшняя дата = DateInCSVFile, введите значение ключа.

Keys.csv

Guest,Key
1-Jun,OIOMY-ZFILZ
2-Jun,LSSJC-PDEUL
3-Jun,MQNVJ-TETLV
4-Jun,HCJIJ-ECVPY
5-Jun,SPACR-AJSLU
6-Jun,MEURS-UQTVX

Код:

$today = Get-Date -format dd-MMM
$keys = import-csv c:\office\keys.csv -Header @(1..2)
$data = $keys | ? { $_.1 -match $today}
Write-Host $data.2

Я пробовал команды foreach и if.Ничего не сработало.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Единственная проблема с вашим кодом - это ваш формат даты, dd-MMM, поскольку LotPings наблюдает:

Создает 0 числа с добавлением влеводля однозначных дней, таких как 6, тогда как даты в CSV не имеют такого дополнения.

Таким образом, изменение Get-Date -format dd-MMM на Get-Date -format d-MMM (просто d вместо dd) должноисправить вашу проблему.

Однако, учитывая, что вы все равно читаете весь файл в память, вы можете оптимизировать команду для (PSv4 +):

$today = Get-Date -Format d-MMM
(Import-Csv c:\office\keys.csv).Where({ $_.Guest -eq $today }).Key

Также обратите внимание, что целью -match является выполнение сопоставления на основе регулярных выражений , а не (без учета регистра) равенство строк ;используйте -eq для последнего.

0 голосов
/ 06 июня 2018

Я могу придумать пару вариантов.Если вы хотите что-то быстрое и грязное, попробуйте:

$stuff = Import-Csv -Path .\stuff.csv 

foreach ($thing in $stuff) {
    if ( $thing.Guest  -eq $(Get-date -Format 'd-MMM') ) {
        Write-Output $thing.Key
    }
}

Я импортирую содержимое файла CSV в переменную.Я перебираю каждую строку.Если день в Гость совпадает с текущим днем, я вывожу ключ

...