AHK:将一个文本块复制到一个数组中,修改并转移到另一个数组

时间:2016-11-07 17:01:35

标签: arrays loops parsing split autohotkey

好吧,这个问题很难说。我已经多次使用Google搜索,但通常情况下我发现我没有使用正确的短语,答案很容易获得。我做医生办公室的医疗记账,我必须包括办公室访问的诊断代码。在电子病历计划中,有一个诊断列表。第一行是医生描述,我不在乎。第二行是ICD-9代码。那些都是旧的,我也不关心那些。第三行(每三行)包含ICD-10代码。这就是我需要的。我希望能够做的是获取整个列表,将其转储到由新行分隔的数组中,并删除不包含特定字符串的每个元素。然后,将所有保留的元素转储到另一个数组(或相同的数组,但不像删除后那样将它们分开3)并删除我保留基于元素的前缀字符串。在那之后,我需要点击一个特定的位置(我知道如何做到这一点),正好添加四个数组元素作为文本(无法计算出来),点击回车,并继续添加并点击输入直到我输入了所有数组。如果有人想看到那个混乱,我会发布我从谷歌搜索中拼凑起来的东西。但是,对于如何做到这一点的一般性解释也将受到赞赏。感谢。

首先,我要复制的东西看起来像这样(实际例子)

  

腰椎管狭窄症 - 原发性

     

ICD-9-CM:724.02

     

ICD-10-CM:M48.06

     

腰椎滑脱

     

ICD-9-CM:738.4

     

ICD-10-CM:M43.16

     

腰椎退行性椎间盘疾病

     

ICD-9-CM:722.52

     

ICD-10-CM:M51.36

     

慢性双侧腰痛伴双侧坐骨神经痛

     

ICD-9-CM: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
}

2 个答案:

答案 0 :(得分:0)

<强>程序

^ j收集包含&#34; ICD-10&#34;的代码,^ k粘贴每行格式化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 

答案 1 :(得分: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
  }
}