#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. Большое вам спасибо! Я успешно вставил ваш скрипт и протестировал его. Результат замечательный!