0

HL7セグメントがたくさんある巨大なファイルがあります。1000(またはそれくらい)の小さなファイルに分割する必要があります。HL7データがあるので、通過するパターン(ロジック)があります。各データチャンクは「MSH|」で始まります 次のセグメントが「MSH|」で始まるときに終了します。

そのマシンにはソフトウェアをインストールできないため、スクリプトはWindows(cmd)ベースまたはVBSである必要があります。

ファイル構造:

MSH|abc|123|....
s2|sdsd|2323|
...
..
MSH|ns|43|...
...
..
.. 
MSH|sdfns|4343|...
...
..
asds|sds

MSH|sfns|3|...
...
..
as|ss

上記の例のファイルは、2つまたは3つのファイルに分割する必要があります。また、ファイルはUNIXからのものであるため、改行はソースファイルにそのまま残しておく必要があります。

何か助けはありますか?

4

2 に答える 2

2

これは、大きなhl7ファイルをデータファイルに基づいた新しいファイル名で個別のファイルに解析するために使用したサンプルスクリプトです。インストールを必要としないREBOLを使用します。コアバージョンはレジストリエントリを作成しません。

着信ディレクトリをスキャンして単一のファイルに分割し、次のファイルが到着するのを待つ、より一般化されたバージョンがあります。

Rebol [
    file: %split-hl7.r
    author: "Graham Chiu"
    date: 17-Feb-2010
    purpose: {split HL7 messages into single messages}
]

fn: %05112010_0730.dat
outdir: %05112010_0730/

if not exists? outdir [
    make-dir outdir
]

data: read fn
cnt: 0
filename: join copy/part form fn -4 + length? form fn "-"
separator: rejoin [ newline "MSH"]
parse/all data [
    some [
        [ copy result to separator | copy result to end ]
        (
            write to-file rejoin [ outdir filename cnt ".txt" ] result
            print "Got result"
            ?? result
            cnt: cnt + 1
        )
        1 skip
    ]
]
于 2010-07-22T10:59:16.177 に答える
1

HL7には多くのセグメントがあります-ファイルにはMSHセグメントしかないことをご存知だと思います。それで、文字列 "(newline)MSH |"のファイルを解析してみましたか?実行中のバッファを保持し、大きくなりすぎたときにそれを出力ファイルにダンプするだけです。

于 2010-06-30T19:24:32.813 に答える