Powershell csv находит значения с обратной косой чертой только в определенном столбце и переименовывает их

#powershell #csv

#powershell #csv

Вопрос:

Я пытаюсь отфильтровать csv-файл в столбце «Результат», чтобы получить значения с обратной косой чертой, а затем переименовать их с соответствующим именем.

Вот пример.csv

 Accession,SrvDate,EntryDate,FinalReportDate,Patient First Name,Patient Last Name,DOB,Gender,Race, Ethnicity,Patient Address,Patient City, Patient State,Patient Zip,Patient Phone,Test Code,Test Name,Result,ClientID, Client Name,Phys  ID, Phys  Name
2132900941,NULL, 11-24-2020,11/29/2020,MICHELL,PENDERGRAS,09/30/1981,F,,U,35 RUSEVELT ST,PRUDENCE, RB,2909, (401)516-5642,Z620, Sars-COVID19, Positive,99984,"ASHRAF FARID, M.D.",50845,ATPAV RIGTED
2232900942,NULL, 11-25-2020,11/29/2020,MICHEL,PENDERGRA, 9/30/1982,M,,U,315 RUSEVELT ST,PRUDENCE, RB,2909, (401)516-5643,Z620, Sars-COVID19, Negative,99984,"ASHRAF FARID, M.D.",50845,ATPAV RIGTED
2332900943,NULL, 11-26-2020,11/29/2020,MICHE,PENDERGR,  9/30/1983,F,,U,325 RUSEVELT ST,PRUDENCE, RB,2909, (401)516-5644,Z620, Sars-COVID19, 989,99984,"ASHRAF FARID, M.D.",50845,ATPAV RIGTED
2432900944,NULL, 11-27-2020,11/29/2020,MICH,PENDERG,  9/30/1984,M,,U,335 RUSEVELT ST,PRUDENCE, RB,2909, (401)516-5645,Z620, Sars-COVID19, 990,99984,"ASHRAF FARID, M.D.",50845,ATPAV RIGTED
2532900945,NULL, 11-28-2020,11/29/2020,ALLISO,JEZA,10/13/1977,F,,U,15 KAUTEEKEE AVE, SOUTH PRUDENCE,RB,2911, (908)930-9213,Z620, Sars-COVID19, 61,99984,"ASHRAF FARID, M.D.",50845,ATPAV RIGTED
2632900946,NULL, 11-29-2020,11/29/2020,ALLIS,JEZ, 10/13/1978,M,,U,151 KAUTEEKEE AVE,SOUTH PRUDENCE,RB,2911, (908)930-9214,Z620, Sars-COVID19, 990,99984,"ASHRAF FARID, M.D.",50845,ATPAV RIGTED
2732900947,NULL, 11-30-2020,11/29/2020,ALLI,JE,  10/13/1979,F,,U,152 KAUTEEKEE AVE,SOUTH PRUDENCE,RB,2911, (908)930-9215,Z620, Sars-COVID19, @,99984,"ASHRAF FARID, M.D.",50845,ATPAV RIGTED
2832900948,NULL, 12-1-2020,11/29/2020,ALL,J,  10/13/1980,M,,U,153 KAUTEEKEE AVE,SOUTH PRUDENCE,RB,2911, (908)930-9216,Z620, Sars-COVID19, Positive,99984,"ASHRAF FARID, M.D.",50845,ATPAV RIGTED
 

990 должен быть назван как «Предполагаемый положительный»

989 должен быть назван как «Недопустимый»

61 должен быть назван как «QNS»

Вот скрипт, который я пытался использовать для простой фильтрации значений обратной косой черты, но затем я застрял:

 $inval = [regex]::escape('989')
$prespos = [regex]::escape('990')
$in = Import-Csv (Get-ChildItem -Path C:example.csv).Fullname | ? "Result" -in $inval, $prespos
 

или вот так:

 $in = Import-Csv (Get-ChildItem -Path C:example.csv).Fullname | ? "Result" -in "990", "989"
 

Но переменная $in не имеет выходных данных.

Не могли бы вы помочь мне решить эту проблему.

Спасибо!

Комментарии:

1. Вы хотите заменить 989 на Invalid или, если result столбец содержит 989 , затем установите значение result столбца равным Invalid ? Ваше условие не выполняется, потому что вы тестируете свойство Test Result вместо Result . Использование -in будет работать только в том случае, если строки точно совпадают.

2. @AdminOfThings Спасибо, я исправил это в своем вопросе. Я пробовал с правильным свойством, но в примере неправильно. У меня есть несколько дополнительных фильтров в моем полном скрипте, но я полностью застрял с этими обратными косыми чертами. Когда скрипт найдет результат с помощью 989 или 990, он также должен проверить наличие дубликатов, выполнить дополнительные вычисления, а затем экспортировать результат в файл или отправить по электронной почте. Но я со всем этим справляюсь. Я столкнулся с проблемой, когда был вынужден включить 989 и 990 рядом с «Положительным». Я попытаюсь использовать ваше предложение сейчас.

Ответ №1:

Я бы сделал что-то вроде следующего, если Result поле содержит точные совпадения для данных, которые вы хотите заменить.

 # read Csv as object in $data
$data = Import-Csv example.csv
# hash of replacement values
$hash = @{'990' = 'Presumptive Positive'; '989' = 'Invalid'; '61' = 'QNS'}
# only select rows that need to be replaced
foreach ($row in $data | Where Result -in $hash.keys) {
    # update current row result with replacement value
    $row.Result = $hash[$row.Result]
}
# output object as CSV
$data | Export-Csv output.csv -NoType
 

Комментарии:

1. Большое вам спасибо! Я успешно вставил ваш скрипт и протестировал его. Результат замечательный!