ΠΏΡΠ°ΠΈΡΡΠΎΡΠΈΡ
ΠΠ΄Π½Π° ΠΌΠ΅Π΄ΠΈΡΠΈΠ½ΡΠΊΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Π²Π½Π΅Π΄ΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° 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);
- Π ΡΠΈΠΊΡΠ» Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ ΡΠ°ΠΉΠ» Π½Π°Π²Π΅Π΄Π½ΡΠΆ ΠΈ Π³ΠΎ ΡΠ΅ΡΠ΅ΠΌ ΡΠ΅Π΄ ΠΏΠΎ ΡΠ΅Π΄;
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ split, ΡΠ°Π·Π΄Π΅Π»ΡΠΌΠ΅ Π²ΡΠ΅ΠΊΠΈ ΡΠ΅Π΄ Π½Π° 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