私はEMR(Electronic Medical Records)システムに不満を持ち、切り替えたいクライアントを手助けしようとしていますが、患者の人口統計データデータベースから(名前、アドレス、dobを何らかの種類のcsvファイルに入れてもらえるかどうか、非常に基本的なものかどうかを尋ねました)。 (彼らはSQLデータベースを使用していると考えて狂っている)。 とにかく - 患者を引き渡す方法はxmlファイルにあり、そのうちの約40,000 +があります。しかし、彼らは人口統計よりもはるかに多くを含んでいます。 15年前に広範なPerlプログラミングを行った後(私はそれが長年にわたり錆びていると認めます)、Perlでこれを行うのは良い仕事だと思っていました。そのトリックをすることができるようだ。興味のある 残念ながらXMLコードは次のようになります。XML :: Twigは同じパスで同じ名前のタグを解析しています
< ==スニップ==> xmlファイルに以下のアドレスetc.areため
<patient extension="Patient ID Number"> // <--Patient ID is 5 digit number)
<name>
<family>Patient Family name</family>
<given>Patient First/Given name</given>
<given>Patient Middle Initial</given>
</name>
<birthTime value=YEARMMDD"/>
複数のフィールド。
< ==スニップ==>ここで
は、私がコード化されたものです:
my $twig=XML::Twig->new(twig_handlers => {
'patient/name/family' => \&get_family_name,
'patient/name/given' => \&get_given_name
});
$twig->parsefile('test.xml');
my @fields;
sub get_family_name {my($twig,$data)[email protected]_;$fields[0]=$data->text;$twig->purge;}
sub get_given_name {my($twig,$data)[email protected]_;$fields[1]=$data->text;$twig->purge;}
私はユニークなタグ(家族、都市、郵便番号、などを持っている全ての情報を読み取る問題がありません。)しかしXML:Twigはタグの真ん中のイニシャルを返すだけです。 "given"の最初の出現にどのように対処し、$ fields [1]に、2番目の "given"を$ fields [2]に割り当てるか、または中間の頭文字をチャックします。
また、「患者ID」または「birthTime」の値をXML :: Twigで抽出するには、その参照を見つけることができませんでした。 私は$ data-> findvalue( 'birthTime')を使ってみましたが、それは空に戻りました。
私は見ました:Perl, XML::Twig, how to reading field with the same tagこれは非常に役に立ちましたが、重複したタグは同じパスにありますので、それは異なっており、私は答えを見つけることができません。 XML :: Twigは、ファイルの解析中に一致するものを見つけたときに最後に見つかった値だけを返しますか?値のすべての出現を抽出する方法はありますか?
ご協力いただきありがとうございます。
こんにちは、私は今夜それを試してみます。しかし、あなたの質問には、各患者には独自のxmlファイルがあります。私たちは解析する必要があるものが約40,000 +あります。そして、はい、私は最後の行で患者の閉鎖を忘れていました - 質問ボックスで書式を調べるのに少し問題がありました - そして、最後にそれを追加するのを忘れました(コピー&ペーストはコードのテキストボックスそうみたいです)。 – yoeddy
こんにちはボロディン、ご協力いただきありがとうございます。投稿した内容は、Twigモジュールの理解を深めるのに役立ち、必要なデータを解析することができました。いいえ、データをクリーンアップして、これらのファイルで実行することはできません。ありがとうございました! – yoeddy
最後にもう1つの質問 - ハッシュをグローバル配列にプッシュすることが大好き - きれいで清潔です。私の質問です - 私は40,000ファイルを解析する必要がある場合、これは問題になりますか?その配列に40,000 +ハッシュがありますか? perlはこのような大きな配列を扱うことができますか?あるいは、各ファイルの結果をcsvファイルに直接書き込むほうがよいでしょうか?私は、40,000ハッシュの配列を埋めて、最後にcsvファイルに書き込むよりも、小さなファイル操作でより多くのリソースを消費することを求めていると思いますか?ありがとうございました! :) – yoeddy