αααααα»αααααααααα·ααΆααααα
α’αααααΆααααααααΆααααααα½αααΆαα’αα»αααααααααααααΆααααααα’ααααΎαααΆαααΈααα 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 XP αα·α Windows 7 ααΌα ααααααΆαααΆαααααΆααΆααααααα’αααΈαα½αααΌα ααααααααα’ααααΎ VBScript α ααα»αααα alas, ααΆαα·αα’αΆα αα αα½α αααααα»αααΆαααααΎααΆααα αΆαααααα·α αα ααΆααααααααααααΆααααααααααα·ααααααααααααααα»αααΆααααααα’αααΈααααααα»αααααΆααα·ααααα»αααααΆααα αααα»αααΆααΆαααα ααΆαααααΆααΆαααααααα αα·ααααααα‘αΎααα·ααααα·αααααααααα (αα½ααααααααΆααααΆ αααα»αααΆααααααααααααααααΆαα αααα»αααααΆααααααααα»ααα½α α αΎα ααΌα αααααααα»ααα·αααΆαααααααΆαα½α 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 ααααα αααααααΎααααααααΆαααααΆαααααα
- ααΎαααααΎααααααΆααααΆαα½αααΆααα listener αα·αααΆαααα·αααααααααα½αααααααααΆααα―αααΆαααΈαα½αα (αααααα’αα·αα·αα 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