在HIS的运行中,最近两个月设置保存了药房发药流水记录,用来排查可能出现的问题。
前段时间发现,在极个别的情况下,会出现对某个处方重复发药。为了找到原因,需要在几万行的记录中,定位出问题的处方编号,在经过整理去掉了发药时间、库存数量等信息后,保存到一个临时文件中的记录格式形式如下:
... ...
noteid=110331123127 medid=110309153426
noteid=110331140230 medid=110220100028
noteid=110331140230 medid=110321092257
noteid=110331140230 medid=110214102625
noteid=110331140230 medid=110329101342
noteid=110331140230 medid=110113150948
noteid=110331140230 medid=101012143139
noteid=110331141148 medid=110214103124
noteid=110331143127 medid=110221100743
noteid=110331143127 medid=110328093237
... ...
也就是只保留了处方编号和药品编号,对重复发药的情况,相同的处方编号里会存在重复的药品编号。
也就是只要在这临时文件中分析出重复的行,就可以判断有问题的处方编号了。
如果自己编程,应该可以实现,但算法比较复杂。在网上搜索,发现一个使用Perl用来消除重复行的例子:
perl -n -e 'if ( /^\s*$/){print; next};if (exists($hash{$_})) { print } else { $hash{$_}=1; next }' filename
经过稍加修改,可以用来打印重复行:
perl -n -e 'if ( /^\s*$/){print; next};if (exists($hash{$_})) { next } else { $hash{$_}=1; print }' filename
通过这个单行程序,迅速在几万条记录的文件中定位了几个出问题处方,重复发药的问题已经得到解决。
这个单行Perl程序十分精炼,感觉有必要记录下来。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21129783/viewspace-693273/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21129783/viewspace-693273/