AHK:在将文本解析为数组时删除重复项

时间:2016-11-17 19:39:13

标签: arrays loops sorting parsing autohotkey

我在医生办公室工作,我正在编写代码以简化结算流程。我必须在计费软件中包含所有诊断,因此我复制整个图表,并通过寻找前缀ICD-10的换行符将其解析为数组,如果两个代码在同一行上,它也将它们分开(通过逗号)。在此之前,它会删除包含已取消程序的图表的一部分(如果存在),因此不会收取已取消的程序。有时,为了命令程序(它是自动的),图表中包含多个相同的诊断,我只需要将每个诊断添加到数组一次。

        [...]
        SendInput, ^a
        ClipBoard :=
        SendInput, ^c
        ClipWait
        BlockInput, MouseMoveOff
        lString := ClipBoard
        Sleep, 200
        IfInString, lString, Canceled Orders
            {
            lStringLeft := SubStr(lString, 1, InStr(lString, "Canceled Orders")-1)
            Sleep, 20
            lStringRight := SubStr(lString, InStr(lString, "Allergies as of"))
            Sleep, 20
            lString :=
            Sleep, 20
            lString := lStringLeft
            Sleep, 20
            lString .= lStringRight
            Sleep, 20
            }
        DxArr := []
        numDx := 0
        Loop, Parse, lString, `n
            If InStr(A_LoopField, "ICD-10")
                Loop, Parse, A_LoopField, `,
                    DxArr[++numDx] := Trim(SubStr(A_LoopField, InStr(A_LoopField, ":") + 1), " `t`n`r")
        [...]

的理想输出
  

原发性高血压

     

ICD-9-CM:401.0

     

ICD-10-CM:I10

     

慢性肾脏疾病的原发性高血压,第3阶段

     

ICD-9-CM:585.3,401.0

     

ICD-10-CM:N18.3,I10

  

I10 N18.3

我在互联网上找到了几种不同的解决方案,但到目前为止,他们只是弄得一团糟而不是解决任何问题。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

使用哈希删除重复项。使用您的代码作为键和值的虚拟。我使用下面的“true”作为虚拟值。重复记录具有相同的密钥,因此它们替换了以前的键值对。

完成解析输入后输出哈希的键。

DxHash := {}
Loop, Parse, lString, `n
  If InStr(A_LoopField, "ICD-10")
    Loop, Parse, A_LoopField, `,
      DxHash[Trim(SubStr(A_LoopField, InStr(A_LoopField, ":") + 1), " `t`n`r")] := true

for diagnosis,dummy in DxHash
  send %diagnosis%{SPACE}