ΠΡΠ΅Π΄ΡΡΡΠΎΡΠΈΡ
Π ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ΅Π΄ΠΈΡΠΈΠ½ΡΠΊΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π²Π½Π΅Π΄ΡΡΠ»ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° Π±Π°Π·Π΅ PACS-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Orthanc ΠΈ DICOM-ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Radiant. Π Ρ ΠΎΠ΄Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π²ΡΡΡΠ½ΠΈΠ»ΠΈ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ DICOM-ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ Π² PACS-ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
- ΠΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
- AE-ΠΈΠΌΡ (Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎ)
- TCP-ΠΏΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ DICOM-ΠΎΠ±ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΎΡ PACS-ΡΠ΅ΡΠ²Π΅ΡΠ° (Ρ.Π΅. ΡΠ΅ΡΠ²Π΅Ρ ΠΊΠ°ΠΊ Π±Ρ ΡΠΎΠ»ΠΊΠ°Π΅Ρ ΠΈΡ Π² ΡΡΠΎΡΠΎΠ½Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° β ΠΈΠ½ΠΈΡΠΈΠΈΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΡΠΌ)
- IP-Π°Π΄ΡΠ΅Ρ
ΠΠΎΡΠ»Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Radiant ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΊ ΡΠ°Π·ΠΌΡΡΠ»Π΅Π½ΠΈΡ β Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΠ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌΠΈ Π²ΡΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»Π° ΠΊ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° pacs.xml, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π»ΡΡ Π² ΠΏΡΠΎΡΠΈΠ»Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (ΠΏΡΡΡ: %APPDATA%RadiantViewerpacs.xml). ΠΡΠΈ ΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΎΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π»ΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π΄Π²ΡΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ (AE-ΠΈΠΌΡ Ρ Π²ΡΠ΅Ρ ΡΠ°Π·Π½ΠΎΠ΅, Π° ΠΏΠΎΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ, ΠΊΡΠΎΠΌΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ΅ β ΡΠ°ΠΌ ΠΏΠΎΡΡΡ ΡΠΎΠΆΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π½Π°Π·Π½Π°ΡΠ°ΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ).
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° pacs.xml ΠΏΠΎ
ΠΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΏΠΎΠ»Π³ΠΎΠ΄Π° Π²ΡΠ΅ Π±ΡΠ»ΠΎ Ρ ΠΎΡΠΎΡΠΎ, ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π°ΡΠ°Π±ΠΎΡΠ°Π»Π°β¦ΠΈ ΡΡΡ Π΄ΠΎ Π½Π°Ρ Π΄ΠΎΡΠ»ΠΈ Β«ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈΒ»:
- ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²Π²Π΅ΡΡΠΈ Π² ΡΡΡΠΎΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½ΠΎΠ²ΡΡ PACS-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡ ΡΡΠ°ΡΡΠ΅ (Π³Π΄Π΅ ΡΡΠ°Π»ΠΎ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΡΡ ΠΌΠ΅ΡΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠ°Ρ ). PACS ΡΠ΅ΡΠ²Π΅ΡΠ° Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ , Π½ΠΎ ΡΠ΅ΡΡ Π½Π΅ ΠΎΠ± ΡΡΠΎΠΌ;
- ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-ΡΠΎ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ (Π΄Π²ΡΠΌΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΠΌΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ) Π½Π° 200 ΠΌΠ°ΡΠΈΠ½Π°Ρ (ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π»ΠΎΡΡ);
- Π£ΡΠΈΡΡΠ²Π°Ρ ΡΠ΅ΠΌΠΏΡ ΡΠΎΡΡΠ° ΠΎΠ±ΡΠ΅ΠΌΠΎΠ² ΠΎΠ±ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ, ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½ΡΠΆΠ½ΠΎ Π½Π΅ ΡΠ°Π·ΠΎΠ²ΠΎΠ΅, Π° ΡΠΈΡΠ°ΠΆΠΈΡΡΠ΅ΠΌΠΎΠ΅ ΠΈ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 1 ΡΠ°Π· Π² 3-5 ΠΌΠ΅ΡΡΡΠ΅Π²).
ΠΡΠ±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ
ΠΠ½Π°ΡΠ°Π»Π΅ Π±ΡΠ»ΠΈ ΠΏΠΎΠΏΡΡΠΊΠΈ Π½Π°ΠΉΡΠΈ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈΠ·ΠΌΠ΅Π½ΡΠ»ΠΎ ΡΠ°ΠΉΠ» 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);
- Π ΡΠΈΠΊΠ»Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ ΠΈ ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎ;
- Π‘ ΠΏΠΎΠΌΠΎΡΡΡ split Π΄ΡΠΎΠ±ΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΡΠΎΠΊΡ Π½Π° 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% ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², Π½ΠΎ Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ ΡΡΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ β ΠΎΡΡΠ°Π»ΡΠ½ΡΡ
Π΄ΠΎΠ΄Π΅Π»ΡΠ²Π°Π΅ΠΌ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎ. Π‘ΠΊΡΠΈΠΏΡ ΠΏΠΎ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com