ืคืจืืืกืืืจืื
ืืจืืื ืจืคืืื ืืื ืืืืืข ืคืชืจืื ืืช ืืืืืกืกืื ืขื ืฉืจืชื Orthanc PACS ืืืงืื Radiant DICOM. ืืืืื ืืืืืจื, ืืืืื ื ืฉืื ืืงืื DICOM ืืืื ืืืืืช ืืชืืืจ ืืฉืจืชื PACS ืืืืคื ืืื:
- ืฉื ืืืงืื
- ืฉื AE (ืืืื ืืืืืช ืืืืืื)
- ืืฆืืืช TCP ืฉื ืคืชืืช ืืืืืืืืช ืืฆื ืืืงืื ืืืงืืืช ืกืงืจื DICOM ืืฉืจืช ื-PACS (ืืืืืจ, ืืฉืจืช ืืืืฃ ืืืชื ืืืืืื ืืืงืื - ืืชืืื ืงืืื ืืช ืืืืืืจ)
- ืืชืืืช IP
ืืืืจ ืืงืืช Radiant, ืืืงืืืืช ืงืืืื ืืช ืืืืืจ ืืื ืืืืฉืื: ืขืืืจ ืื ืืงืื, ืืืืจืช ืืชืืื ื ืขื ืืคืจืืืจืื ืื "ื ืืืืื ืืืืืื ืืงืืืฅ pacs.xml, ืฉืืื ืืืืงื ืืคืจืืคืื ืืืฉืชืืฉ (ื ืชืื: %APPDATA%RadiantViewerpacs.xml). ืืื ืขื ืืืช, ืืชืฆืืจื ืฉื ืืงืื ืืื ืฉืื ื ืืืืืจ ืืฉื ื ืคืจืืืจืื ืืคืืืช (ืฉื ื-AE ืฉืื ื ืขืืืจ ืืืื, ืืืคืืจื ืืื ืืขืฆื ืืื, ืืืฅ ืืืงืืืืช ืืกืืฃ ืืคืืขืืื ืขื ืืืชื ืฉืจืช - ืฉื ืื ืืื ืืคืืจืืื ืืืงืฆืืช ืฉืื ื).
ืืืืื ืืงืืืฅ pacs.xml ืืืช
ืืืฉื ืืืฆื ืฉื ื ืืื ืืื ืืกืืจ, ืืืขืจืืช ืืชืืืื ืืขืืื... ืืื ืื ืืืืข ืืืื ื โืืชืืช ืืืื ืืื ืืยป:
- ืขืืื ื ืืืคืขืื ืืกืคืจ ืฉืจืชื PACS ืืืฉืื ืฉืืืืืคื ืืช ืืืฉื ืื (ืฉื ืืื ืืืืืืจ ืฉืื ืืืืกืง). ืฉืจืชื PACS ืืืืื ืืช ืืืจืืืืืืืช, ืืื ืื ืขื ืื ืื ืื ื ืืืืจืื;
- ืขืืื ื ืืฉื ืืช ืืืืคื ืืจืืื ืชืฆืืจืืช ืืืืืืืืช (ืขื ืฉื ื ืคืจืืืจืื ืฉืื ืื) ื-200 ืืืื ืืช (ืืกืคืจื ืืื ืืืืคื ืงืืืข);
- ืืืชืืฉื ืืงืฆื ืืืืืื ืฉื ืืืงืคื ืืกืงืจืื, ืืฉ ืฆืืจื ืืคืชืจืื ืื ืจืง ืคืขื ืืืช, ืืื ืืฉืืืคื ืืงืืืข (ืืืืืื, ืืืช ื-1-3 ืืืืฉืื).
ืืคืชืจืื ื ืืฆื ืืืื.
ืืืืจืช ืืืื ืืคืชืจืื ืืขืื
ืืืชืืื, ืืื ื ืืกืืื ืืช ืืืฆืื ืคืชืจืื ืืืฉืื ืฉืืฉื ื ืืช ืงืืืฅ pacs.xml ืืฆื ืืืงืื ืืืืฆืข ืฉืื ืืืื ืืจืฉืืืช ืฉืจืชื PACS ืืืื ืืืฉืคืืข ืขื ืฉื AE ืืืืืจืืช ืืฆืืืช TCP. ืืงืืืืช Windows ืืืืชื ืชืงืืคื ืืชืืกืกื ืื ืขื Windows XP ืืื ืขื Windows 7 - ืื ืืื ื ืืกืืื ืืช ืืืชืื ืืฉืื ืืื ืขื ืืกืืก VBScript. ืื ืืืื, ืื ื ืืชื ืืื ืืฉืืื ืืืฉืืื ืืื, ืืฉื ืืืกืจ ืื ืืกืืื ืืืืืื ืืืชืืืช ืื ืืืจ ืืืจืื ืืืงืืฃ ืืฉืคื ืื. ืื ืื ืืกืืื ืืช ืืืฆืื ืืืฉืืชืื ืื ืฆืืื (ืืฉ ืืฆืืื ืฉืืืจ ืืืืชื ืื ืชืืื ืืช ืืืจืช ืืจืืฉ, ืื ืื ืืชืขืกืงืชื ืขื VBScript ืืืชืจ ื-3-4 ืฉืขืืช).
ืืกืืคื ืฉื ืืืจ ืืืขืชื ืืคืชืจืื ืืื:
- ืืืืฆืขืืช ืืืื ืืืช ืงืืืฆืชืืช, ืืกืืฃ ืืช ืื ืงืืฆื pacs.xml ืืืงืื ืืื ืืื ืฉืจืช ืืืฉืื ืจืฉืช;
- ืฉื ื ืงืืฆืื ืืืืื ืืื (ืืืจ ืืื ืื ื ืืกืืื ืืคืชืจืื ืืขืืืช ืืืื ืืืืฆืขืืช Perl);
- ืืฉืชืืฉ ืื ืืืืื ืืืช ืงืืืฆืชืืช ืืื ืืขืืื ืืช ืืืืจืืช ืืืงืื.
ืืืกืืฃ ืงืืฆืื ืืืืฆืขืืช ืืืื ืืืช ืงืืืฆืชืืช
ืืืืง ืืคืฉืื ืืืืชืจ ืืื ืฉืืืฉืจ ืืงืื ื ืื ืก ืืคืจืืคืื ืฉืื, ืืื, ืขื ืืืืืืชืื, ืืืฆืข ืงืืืฅ .bat ืืกืืื, ืืืืืจ:
echo off
If exist %APPDATA%RadiantViewerpacs.xml copy %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml
ืืคืืื, ืงืืฆื pacs.xml ืืฆืืืจื ืืฉืจืช ืืืฉืื ื ืกืชืจ, ืฉืฉืื ืืืื ืืืืข ืืืืื ืืืฉื ืืืืืื ืืฉืชืืฉ ืืชืฆืืจื ืืื ืืืขืชืงื.
ืืืืจ ืืงืฉื ืืืืชืจ ืืื ืืืืืช ืขื ืฉืืืืื ืืืช ืืื ืชืขืืื ืขืืืจ ืื ืืืฉืชืืฉืื.
ืฉืื ืื ืชืฆืืจืืช ืืืืฆืขืืช ืกืงืจืืคื Perl
ืื ื ื ืฆืืจื
ืืชืกืจืื ืขืฆืื ืืชืืจืจ ืืคืฉืื ืืืื:
use XML::Writer;
# ะัะบััะฒะฐะตะผ ะฟะฐะฟะบั ั ะพััะตัะฐะผะธ, ะพะฑัะฐะฑะฐััะฒะฐะตะผ ััะฟะธัะพะบ (ัะดะฐะปัะตะผ ะปะธัะฝะตะต):
$report_dir = "C:Perl64WORKPACS-xml3";
opendir(DIR, "$report_dir") or die "ะะต ะผะพะณั ะพัะบัััั ะฟะฐะฟะบั ั ะพััะตัะฐะผะธ!";
@report_files = readdir DIR;
shift (@report_files); # ัะดะฐะปัะตะผ ัะพัะบั ะธะท ัะปะตะผะตะฝัะพะฒ ะผะฐััะธะฒะฐ (.)
shift (@report_files); # ัะดะฐะปัะตะผ ะดะฒะต ัะพัะบะธ ะธะท ัะปะตะผะตะฝัะพะฒ ะผะฐััะธะฒะฐ (..)
# print "@report_files";
closedir(DIR);
# ะะฐัะธะฝะฐะตะผ ะพะฑัะฐะฑะฐััะฒะฐัั ัะฐะนะปั - ะฟะพ ะพะดะฝะพะผั ะทะฐ ัะฐะท. ะัะถะฝะพ ััะธัะฐัั ะฟะฐัะฐะผะตัั AET ะธ ะฝะพะผะตั ะฟะพััะฐ ะฒ ะฟะตัะตะผะตะฝะฝัะต.
foreach $analiz_file (@report_files)
{
$full_path_to_file="C:Perl64WORKPACS-xml3".$analiz_file;
open (INFO, $full_path_to_file);
while ($line = <INFO>)
{
# ะะตัะตะผะตะฝะฝัะต $aet ะธ $port ัะพะดะตัะถะฐั ัะฝะธะบะฐะปัะฝัะต ะดะฐะฝะฝัะต ะดะปั ะบะฐะถะดะพะณะพ XML ัะฐะนะปะฐ:
my ($other1, $aet, $other2, $port, $other3) = split /"/, $line, 5;
# ะัะปะธ ะฒัััะตัะฐะตััั ัััะพะบะฐ listener - ัะพ ะผั ะดะพัะปะธ ะดะพ ะฝัะถะฝะพะน ัััะพัะบะธ ะธ ะผะพะถะฝะพ ัะพัะผะธัะพะฒะฐัั ะฝะพะฒัะน XML:
if ($other1 =~ 'listener')
{
# ะคะพัะผะธััะตะผ ะฝะพะฒัะน XML c ะฝัะถะฝัะผะธ ะฟะพะปัะผะธ ะธ ะดะฐะฝะฝัะผะธ:
my $writer = XML::Writer->new(OUTPUT => 'self', DATA_MODE => 1, DATA_INDENT => 2, );
$writer->xmlDecl('utf-8');
$writer->startTag('pacs');
$writer->startTag('listener', ae => $aet, port => $port);
$writer->endTag();
$writer->startTag('hosts');
$writer->startTag('host', name => 'MRT', ae => 'ORTHANC', ip => 'XX.YY.214.17', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
$writer->endTag();
$writer->startTag('host', name => 'KT', ae => 'ORTHANC2', ip => 'XX.YY.215.253', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
$writer->endTag();
$writer->startTag('host', name => 'R', ae => 'ORTHANC3', ip => 'XX.YY.215.252', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
$writer->endTag();
$writer->startTag('host', name => 'KT-20180501-20180831', ae => 'ORTHANC4', ip => 'XX.YY.215.251', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
$writer->endTag();
$writer->startTag('host', name => 'KT-20180901-20181130', ae => 'ORTHANC5', ip => 'XX.YY.215.250', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
$writer->endTag();
$writer->endTag('hosts');
$writer->startTag('presets');
$writer->endTag();
$writer->startTag('lastsearch', dt => '4', mfid => '1048592');
$writer->endTag();
$writer->endTag('pacs');
# ะะพะผะตัะฐะตะผ ะณะพัะพะฒัะน XML ะฒ ะฟะตัะตะผะตะฝะฝัั:
my $xml = $writer->end();
# ะะพะดะณะพัะฐะฒะปะธะฒะฐะตะผ ัะฐะนะป ะดะปั ะฟะตัะตะทะฐะฟะธัะธ:
$rewritexml = $full_path_to_file;
# ะะตัะตะฟะธััะฒะฐะตะผ XML ัะฐะนะปั ะฝะพะฒัะผะธ ะดะฐะฝะฝัะผะธ:
open (NEWXML, ">$rewritexml");
print NEWXML $xml;
close (NEWXML);
}
}
}
ืขืงืจืื ืคืขืืืชื:
- ืื ื ืคืืชืืื ืืช ืืกืคืจืืื ืื ืืกืคื ื ืชืฆืืจืืช pacs.xml ืืืงืืืืช ืืืืงืืื ืืช ืจืฉืืืช ืืงืืฆืื ืืืขืจื ืฉื ืกืงืืจืื (@report_files);
- ืืืืืื, ืื ื ืืขืืืื ืงืืืฅ ืืื ืืื ืคืขื ืืงืืจืืื ืืืชื ืฉืืจื ืืืจ ืฉืืจื;
- ืืืืฆืขืืช ืคืืฆืื, ืื ื ืืคืฆืืื ืื ืฉืืจื ื-5 ืืืงืื, ืชืื ืฉืืืืฉ ืืืืจืืืืช ืืืคืจืื;
- ืื ื ืืืฆืืื ืฉืืจื ืขื ืืืืื ืืืืื ืืืืงืืื ื ืชืื ืื ืืืืืืืื ืขืืืจ ืื ืงืืืฅ (ืฉื ืืงืื AE ืืืกืคืจ ืืฆืืืช TCP) ืืฉื ื ืืฉืชื ืื;
- ืืืืจ ืืื, ืื ื ืคืฉืื ืืืฆืจืื ืงืืืฅ XML ืืืฉ, ืืื ืืกืื ืืืื ืคืจืืืจืื ืืืืืืืื ืืื ืืื ืืกืื ืืช ืืืกืคืจ ืื ืืจืฉ ืฉื ืฉืจืชื PACS ืขื ืืคืจืืืจืื ืฉืืื - ืึธืึตื. ืืฉืืื ืื ืืื ืืชืืื)
- ืื ื ืืฉืืชืืื ืืช ืงืืืฅ ื-XML ืืืืฉ ืขื ืืืฉื.
ืืฉ ืืฆืืื ืฉืืืขืฉื, ืื ื ืื ืืฉืชืืฉ ืืกืงืจืืคื ืืื ืืืืคื ืืืืืืื ืืืืืืื - ืืืขืฉื, ืื ื ืืขืชืืง ืืช ืืืืืจืืช ืฉื ืืกืคื ืืกืคืจืืื ื ืคืจืืช ืืื ืืจืืฅ ืืช ืืกืงืจืืคื ืืืฉื ื ืืช ืืืื ืืืืื ืืื. ืืืืจ ืืื, ืืืืงื ืืงืจืืืช - ืื ืืชื ืืืคืืฅ ืืช ืืืืืจืืช ืืืืจื ืืืืื ืืช.
ืืคืฆืช ืงืืฆื pacs.xml ืฉืืฉืชื ื ืืืงืืืืช
ืืืืจ ืืคืฉืื ืืืืชืจ ืฉืขืื ืืจืืฉ ืืื ืืืฆืข ืฉืื ืืืื ืืงืืืฅ ื-bat. ืฉืืืจ ืขืืื ืฉืืืกืฃ ืชืฆืืจืืช ืืืงืืืืช ืืืืืกืืฃ ืืช ืืฉืืจื:
If exist %APPDATA%RadiantViewerpacs.xml copy /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml
ืงืืืฅ ื-bat ืืกืืคื ื ืจืื ืื:
@echo off
If exist %APPDATA%RadiantViewerpacs.xml copy %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml
If exist %APPDATA%RadiantViewerpacs.xml copy /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml
ืืกืงื ื
ืื ืืื ืื "ืืืจื"ืคืชืจืื. ื ืืกืื ื ืืช ืื ืืืจ ืคืขืืืื (ืืกืคืืืืจ 2018 ืืคืืจืืืจ 2019), ืขื ืื ืืืืกื ืจืืืื. ืืืืื, ืื 100% ืืืืงืืืืช ืืขืืื ืื, ืืื ืื ืงืจืื ืืขืจื ืืื - ืื ืื ื ืืฉืืืืื ืืช ืืฉืืจ ืืจืืืง. ืชืกืจืื ืืืช
ืืงืืจ: www.habr.com