2016-11-07 3 views
0

Хорошо, поэтому вопрос трудно сформулировать. Я несколько раз искал это в googled, но обычно оказывается, что я не искал правильные фразы, и ответ легко доступен. Я работаю медицинским биллером для офиса врачей, и я должен включать диагностические коды для посещения офиса. В программе «Электронная медицинская запись» есть список диагнозов. Первая строка - описание врачей, меня это не волнует. Вторая строка - это код ICD-9. Те старые, мне тоже все равно. Третья строка (каждая третья строка) содержит код ICD-10. Это то что мне нужно. То, что я хотел бы сделать, это захватить весь список, выгрузить его в массив, ограниченный новыми строками, и избавиться от каждого элемента, который не содержит определенную строку. Затем выгрузите все сохраненные элементы в другой массив (или тот же, но не разделенный на 3, как они были бы после удаления) и удалите эту префиксную строку, на которой я сохранил элементы на основе. После этого мне нужно щелкнуть по определенному месту (я знаю, как это сделать), добавить ровно четыре элемента массивов в виде текста (не могу понять это), нажать enter и продолжать добавлять и нажимать, пока я не ввел весь массив. Я опубликую то, что я пробовал, булыжник из поисковых запросов Google, если кто-то хочет увидеть этот беспорядок. Но также будет оценено общее объяснение того, как это сделать. Благодарю.AHK: Копирование блока текста в массив, изменение и перенос на другой массив

первую очередь, материал я бы копируя будет выглядеть следующим образом (фактический пример)

Поясничный стеноз - Первичный

ICD-9-CM: 724,02

МКБ 10-СМ: M48.06

Спондилолистез из поясничной области

МКБ-9-CM: 738,4

МКБ-10-СМ: M43.16

Поясничных дегенеративное заболевание диск

МКБ-9-КМ: 722,52

МКБ-10-СМ: M51.36

Хронические двусторонняя боль в нижней части спины с двусторонним радикулита

МКБ-9-КМ: 724,2, 724,3, 338,29

ICD-10-CM: M54.42, M54.41, G89.29

Естественно, список будет намного длиннее. Строка, которую я хотел бы сохранить в строках, была бы «ICD-10-CM:», просто так вы, ребята, знаете. Я попытался использовать его в качестве разделителя в кавычках, но получил некоторые действительно довольно странные результаты. Было бы легче решить эту проблему, если бы это работало как разделитель.

Arrays:={} 
RealArray:={} 
^j:: 
sendinput, ^c 
sleep 20 
bigone:=ClipBoard 
sleep 2000 
;StringReplace, bigone, newbigone, `n, "DLMTR", All 
;Arrays:= StrSplit(newbigone, "DLMTR") 
StringSplit, Arrays, bigone, `n 
k=4 
j=1 
loop 
{ 
if (k<Arrays.Max_Index) 
{ 
RealArray%j%=Arrays%k% 
j++ 
k++ 
k++ 
k++ 
} 
else 
return 
} 
return 

^L:: 
a=0 
loop 
{ 
if (a<RealArray.Max_Index) 
{ 
send RealArray%a% 
a++ 
sendinput, {Space} 
if(mod(a,5)==0) 
sendinput, {enter} 
} 
else 
return 
} 

ответ

0

Программа

^J собирает коды, содержащие "ICD-10",^к вставляет коды отформатированные 5 в каждой строке

^j::copyit() 
^l::pasteit() 


copyit() 
{ 
    sendinput, ^c 
    sleep 20 
    bigone := ClipBoard 
    sleep 100 

    global matches 
    matches := [] 
    numMatches := 0 
    Loop parse, bigone, `n 
    Loop parse, A_LoopField, `, 
     if InStr(A_LoopField, "ICD-10") 
     matches[++numMatches] := trim(substr(A_LoopField, InStr(A_LoopField, ":") + 1), " `t`n`r") 
} 


pasteit() 
{ 
    global matches 
    for index, element in matches 
    { 
    Send %element%{SPACE} 
    if mod(index,5) == 0 
     Send {ENTER} 
    } 
} 

Входной сигнал:

Recurrent major depressive disorder, in partial remission 

ICD-9-CM: 296.35 

ICD-10-CM: F33.1 

ICD-10-CM: F33.2 
ICD-9-CM: 296.35 

ICD-10-CM: F33.3 
ICD-10-CM:  F33.4 
ICD-9-CM: 296.35 

ICD-10-CM:  F33.5, ICD-10-CM: X432.6, ICD-10-CM: Y232.6 
ICD-10-CM: F33.6 

ICD-9-CM: 296.35 

Выход:

F33.1 F33.2 F33.3 F33.4 F33.5 
X432.6 Y232.6 F33.6 
+0

Это выглядит совершенно потрясающе. Я собираюсь сделать этот выстрел через несколько минут здесь, потратил слишком много времени этим утром на это, надо немного догнать. Огромное спасибо. Я также очень признателен, что вы используете мои имена переменных. Мне становится легче понять. Благодаря тонну! Только что сделал снимок, он отлично работает! Я расскажу позже, чтобы понять это. Не могли бы вы показать мне, как удалить часть «ICD-10-CM:» каждой строки? Я не могу обернуть голову вокруг циклов в AHK, поэтому используется для C++. – DarknessCalling

+0

Я комментирую код строки за строкой, и я понимаю большую часть (кроме тех вещей, где я не могу изменить его, чтобы он делал то, что я хочу), но у меня возникли проблемы с пониманием , если InStr (A_LoopField, «ICD-10») ICD-10 появится несколько раз, как это сделать, но не вернуть 1 (как в true)? – DarknessCalling

+0

Игнорируйте вторую половину моего первого комментария. Я понял, почему. Я идиот. Нужен дополнительный набор скобок для if, если я добавлю второй оператор. Базовый материал xD – DarknessCalling

0

Не зная, как основная программа, вы автоматизации работы, я не могу сказать вам, когда спать или отправить дополнительную заносит.

Возможно, вы можете запросить состояние экрана, чтобы определить, что делать дальше (например, отправлять коды, добавлять ENTER, ждать).

Я идентифицирую состояние экрана, выполнив поиск небольшого изображения, которое однозначно идентифицирует состояние, в котором находится программа. Я делаю изображения с помощью Alt + PrintScrn, чтобы захватить весь экран, а затем использовать pbrush.exe, чтобы вырезать небольшой уникальный идентификация изображения.

; Search screen for image stored in "images/name.png" 
; return true if found, false otherwise 
find(name) 
{ 
    fname := "images\" . name . ".png" 
    ImageSearch x, y, 0,0,A_ScreenWidth, A_ScreenHeight, *32 %fname% 
    return (ErrorLevel = 0 and x >= 0 and y >= 0) 
} 


; Wait for image stored in "images/name.png" to appear on the screen 
wait_for(name) 
{ 
    tooltip Waiting for %name%, 100,0,1 

    while !find(name) 
    sleep 100 
} 


; business/domain logic bot 
automate_screen() 
{ 
    if (find("logon")) 
    do_stuff_to_logon() 
    else if (find("payroll_history")) 
    do_some_other_stuff() 
    else if (find("payroll_screen1")) 
    { 
    sendplay Type this on screen1{enter}01{enter} 
    wait_for("payroll_screen2") 
    sendplay Type this on screen2{enter} 
    } 
} 


main() 
{ 
    loop 
    { 
    automate_screen() 
    sleep 250 
    } 
} 
+0

Прошу прощения, я не хотел, чтобы вы попытались исправить эту проблему. Я просто жаловался. Спасибо за дополнительную помощь. Проблема с попаданием на вход - если существует более пяти диагнозов, она должна снова открыть диагноз. Как только он щелкнут в первый раз (ранее в моем коде), он становится кнопкой по умолчанию (это означает, что нажатие Enter откроет его). Моя проблема была динамически выяснять, когда нажать enter. Но я получил его с \t \t \t Если (индекс == numDx) и Mod (индекс, 4)! = 0 \t \t \t \t SendInput, {Enter} вне цикла, и \t \t \t \t \t Если (Index DarknessCalling

+0

Кроме того, к сожалению, полная автоматизация не вариант, поскольку есть много вещей, которые не сделали точно так же каждый раз, так что каждая схема должна быть проверена вручную , Однако автоматизация добавления dx действительно экономит время. – DarknessCalling

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^