| dcmodify(1) | OFFIS DCMTK | dcmodify(1) |
نام (NAME)
dcmodify - اصلاح و ویرایش تگها و مقادیر در پروندههای DICOM
خلاصه دستور (SYNOPSIS)
dcmodify [options] dcmfile-in...
توضیحات (DESCRIPTION)
ابزار dcmodify برنامهای است که امکان ویرایش، درج و حذف تگها و آیتمها را در فایلهای DICOM فراهم میکند. توالیها (Sequences) و تگهایی با تعدد مقدار (value multiplicity) بزرگتر از ۱ نیز پشتیبانی میشوند. در حال حاضر اطلاعات متاسرآیند (metaheader) و نمایش مقدار (VR) تگ نمیتوانند مستقیماً توسط dcmodify تغییر یابند. علاوه بر اصلاح تگها، dcmodify گزینههای ورودی متعددی را در دسترس قرار میدهد — تا dcmodify را وادار کند فایلهای ورودی را مطابق با مشخصات ارائهشده توسط کاربر مدیریت کند — و همچنین گزینههای خروجی برای کنترل قالب خروجی فایلهای حاصل ارائه میدهد.
در صورتی که چندین تغییر باید انجام شود، dcmodify تغییرات را دقیقاً به همان ترتیبی که در خط فرمان ظاهر میشوند انجام میدهد. لطفاً توجه داشته باشید که dcmodify بررسی نمیکند که آیا یک مقدار دادهشده با نمایش مقدار (VR) مربوطه مطابقت دارد یا خیر. معمولاً یک پیام خطا چاپ میشود، اما به طور کلی این کاربر است که باید از استفاده صحیح از VR اطمینان حاصل کند.
اگر dcmodify تگی را که باید درج کند نشناسد، VR آن تگ روی UN (ناشناخته) تنظیم میشود و مقدار مشخصشده در خط فرمان به عنوان یک سری اعداد هگزادسیمال (مانند آنچه برای VR=OB ارائه میشود) تفسیر میگردد. لطفاً این تگها را در دیکشنری وارد کنید تا از این رفتار جلوگیری شود. همچنین با مشخص کردن گزینه -iun، میتوان dcmodify را وادار کرد که مقادیر UN را دستنخورده باقی بگذارد. استفاده از گزینه -u به dcmodify اجازه میدهد تمامی ویژگیهای VR=UN را به عنوان OB ذخیره کند.
ابزار dcmodify قادر است با اصطلاحاً «مسیرهای تگ» (tag paths) کار کند تا به تگهای درون توالیها دسترسی داشته باشد. نحو (به شکل شبهفرمال) عبارت است از:
{sequence[item-no].}*element
که در آن 'sequence' یک تگ توالی مانند (0008,1111) یا نام تگ در دیکشنری است. عبارت 'item-no' شماره آیتمی را که باید به آن دسترسی پیدا کرد مشخص میکند (شمارش از صفر شروع میشود). 'element' تگ هدفی را که باید روی آن کار شود تعریف میکند. یک تگ میتواند یا مستقیماً به صورت (0010,0010) یا از طریق نام متناظر آن در دیکشنری مانند "PatientName" مشخص شود. علامت '*' نشان میدهد که میتوانید عبارات توالی را برای دسترسی به سطوح عمیقتر در فایلهای DICOM تکرار کنید (بخش مثالها را ببینید). برای 'item-no' نیز میتوان از نویسه عام '*' برای انتخاب تمام آیتمها در توالی احاطهکننده استفاده کرد (بخش نویسههای عام را در زیر ببینید).
هنگام درج مسیرهای تگ متشکل از چندین گره (یعنی نه یک عنصر منفرد) با استفاده از گزینه -i، هر یک از اجزای گمشده در مسیر (آیتمها، توالیها، عناصر برگ) در صورت نبودن، به طور خودکار درج میشوند. این قابلیت برای نویسههای عام آیتم کار نمیکند: زمانی که حتی یک آیتم در توالی احاطهکننده وجود نداشته باشد، dcmodify مسلماً نمیتواند تصمیم بگیرد که چه تعداد آیتم باید ایجاد شود. با این حال، اگر شماره آیتمی مانند '5' مشخص شود، هر ۶ آیتم (از صفر شمرده شده) میتوانند به صورت خودکار در حالت درج ایجاد شوند (و ایجاد میشوند). اگر قبلاً ۲ آیتم وجود داشته باشد، بقیه (۴ آیتم) درج خواهند شد.
ابزار dcmodify روی دایرکتوریها کار نمیکند؛ یعنی پارامتر dcmfile-in... نباید شامل نامهای دایرکتوری باشد.
لطفاً توجه داشته باشید که نکاتی در رابطه با تغییر تگهای اختصاصی (بخش تگهای اختصاصی را ببینید) و برای تغییر UIDها (بخش تغییر شناسههای یکتا را ببینید) وجود دارد.
پارامترها (PARAMETERS)
dcmfile-in نام فایل(های) ورودی DICOM برای ویرایش ("-" برای stdin/stdout)
گزینهها (OPTIONS)
گزینههای عمومی (general options)
-h --help
چاپ این متن راهنما و خروج
--version
چاپ اطلاعات نسخه و خروج
--arguments
چاپ آرگومانهای بسطیافته خط فرمان
-q --quiet
حالت بیصدا، عدم چاپ هشدارها و خطاها
-v --verbose
حالت پرگو، چاپ جزئیات پردازش
-d --debug
حالت اشکالزدایی، چاپ اطلاعات دیباگ
-ll --log-level [l]evel: string constant
(fatal, error, warn, info, debug, trace)
استفاده از سطح l برای ثبتکننده لاگ
-lc --log-config [f]ilename: string
استفاده از فایل کانفیگ f برای ثبتکننده لاگ
گزینههای ورودی (input options)
قالب فایل ورودی:
+f --read-file
خواندن قالب فایل یا مجموعه داده (پیشفرض)
+fo --read-file-only
فقط خواندن قالب فایل
-f --read-dataset
خواندن مجموعه داده بدون اطلاعات متای فایل
+fc --create-file
ایجاد قالب فایل در صورت عدم وجود فایل
نحو انتقال ورودی:
-t= --read-xfer-auto
استفاده از تشخیص خودکار TS (پیشفرض)
-td --read-xfer-detect
نادیده گرفتن TS مشخصشده در متاسرآیند فایل
-te --read-xfer-little
خواندن با TS صریح VR و ترتیب بایت little endian
-tb --read-xfer-big
خواندن با TS صریح VR و ترتیب بایت big endian
-ti --read-xfer-implicit
خواندن با TS ضمنی VR و ترتیب بایت little endian
تجزیه ویژگیهای با طول فرد:
+ao --accept-odd-length
پذیرش ویژگیهای با طول فرد (پیشفرض)
+ae --assume-even-length
فرض اینکه طول واقعی یک بایت بزرگتر است
تصحیح خودکار دادهها:
+dc --enable-correction
فعالسازی تصحیح خودکار دادهها (پیشفرض)
-dc --disable-correction
غیرفعالسازی تصحیح خودکار دادهها
قالب جریان بیتی ورودی فشردهشده:
+bd --bitstream-deflated
انتظار جریان بیتی فشردهشده deflated (پیشفرض)
+bz --bitstream-zlib
انتظار جریان بیتی deflated zlib
گزینههای پردازش (processing options)
پشتیبانگیری از فایلهای ورودی:
--backup
پشتیبانگیری از فایلها پیش از ویرایش (پیشفرض)
-nb --no-backup
عدم پشتیبانگیری از فایلها (خطرناک)
حالت درج:
-i --insert "[t]ag-path=[v]alue"
درج (یا بازنویسی) مسیر در موقعیت t با مقدار v
-if --insert-from-file "[t]ag-path=[f]ilename"
درج (یا بازنویسی) مسیر در موقعیت t با مقدار از فایل f
-nrc --no-reserv-check
عدم بررسی رزروهای اختصاصی
حالت ویرایش:
-m --modify "[t]ag-path=[v]alue"
ویرایش تگ در موقعیت t به مقدار v
-mf --modify-from-file "[t]ag-path=[f]ilename"
ویرایش تگ در موقعیت t به مقدار از فایل f
-ma --modify-all "[t]ag=[v]alue"
ویرایش تمامی تگهای منطبق t در فایل به مقدار v
حالت پاک کردن:
-e --erase "[t]ag-path"
پاک کردن تگ/آیتم در موقعیت t
-ea --erase-all "[t]ag"
پاک کردن تمامی تگهای منطبق t در فایل
-ep --erase-private
پاک کردن تمامی دادههای اختصاصی از فایل
شناسه یکتا:
-gst --gen-stud-uid
تولید Study Instance UID جدید
-gse --gen-ser-uid
تولید Series Instance UID جدید
-gin --gen-inst-uid
تولید SOP Instance UID جدید
-nmu --no-meta-uid
عدم بهروزرسانی UIDهای متاسرآیند در صورت ویرایش
UIDهای مرتبط در مجموعه داده
مدیریت خطا:
-ie --ignore-errors
ادامه پردازش فایل در صورت بروز خطای ویرایش
-imt --ignore-missing-tags
موفق در نظر گرفتن «تگ یافت نشد»
هنگام ویرایش یا پاک کردن در فایلها
-iun --ignore-un-values
عدم تلاش برای نوشتن مقدار در عناصری
که دارای VR از نوع UN هستند
گزینههای خروجی (output options)
قالب فایل خروجی:
+F --write-file
نوشتن قالب فایل (پیشفرض)
-F --write-dataset
نوشتن مجموعه داده بدون اطلاعات متای فایل
نحو انتقال خروجی:
+t= --write-xfer-same
نوشتن با همان نحو انتقال ورودی (پیشفرض)
+te --write-xfer-little
نوشتن با TS صریح VR و ترتیب بایت little endian
+tb --write-xfer-big
نوشتن با TS صریح VR و ترتیب بایت big endian
+ti --write-xfer-implicit
نوشتن با TS ضمنی VR و ترتیب بایت little endian
نمایش مقادیر پس از ۱۹۹۳ (post-1993 value representations):
+u --enable-new-vr
فعالسازی پشتیبانی از VRهای جدید (UN/UT) (پیشفرض)
-u --disable-new-vr
غیرفعالسازی پشتیبانی از VRهای جدید، تبدیل به OB
کدگذاری طول گروه:
+g= --group-length-recalc
محاسبه مجدد طول گروه در صورت وجود (پیشفرض)
+g --group-length-create
نوشتن همیشگی با عناصر طول گروه
-g --group-length-remove
نوشتن همیشگی بدون عناصر طول گروه
کدگذاری طول در توالیها و آیتمها:
+le --length-explicit
نوشتن با طولهای صریح (پیشفرض)
-le --length-undefined
نوشتن با طولهای تعریفنشده
پدینگ انتهای مجموعه داده (نه همراه با --write-dataset):
-p= --padding-retain
عدم تغییر پدینگ (پیشفرض در صورت عدم استفاده از --write-dataset)
-p --padding-off
بدون پدینگ (ضمنی در صورت استفاده از --write-dataset)
+p --padding-create [f]ile-pad [i]tem-pad: integer
تراز کردن فایل روی مضربی از f بایت و آیتمها روی
مضربی از i بایت
تگهای اختصاصی (PRIVATE TAGS)
هنگام کار با تگهای اختصاصی، نکاتی وجود دارد که باید در نظر بگیرید. با این وجود، درج یا ویرایش یک تگ رزرو (gggg,00xx) همیشه باید به درستی کار کند.
درجها (Insertions)
اگر میخواهید یک تگ اختصاصی (غیر از یک رزرو با gggg,00xx) درج کنید، مطمئن شوید که آن را در دیکشنری خود فهرست کردهاید (برای جزئیات به <docdir>/datadict.txt مراجعه کنید). اگر فهرست نشده باشد، dcmodify آن را با VR=UN درج خواهد کرد. همچنین در برخی موارد ممکن است درج برای برخی مقادیر حتی با شکست مواجه شود.
اگر تگ اختصاصی خود را در دیکشنری داشته باشید، dcmodify به شرح زیر عمل میکند: هنگامی که یک رزرو در مجموعه داده احاطهکننده تگ بیابد که ایجادکننده اختصاصی (private creator) آن مطابقت دارد، درج با VR موجود در دیکشنری و مقدار دادهشده در خط فرمان انجام میشود. اما اگر ایجادکننده اختصاصی مطابقت نداشته باشد یا هیچکدام تنظیم نشده باشد، dcmodify با یک خطا بازمیگردد. اگر یک تگ اختصاصی باید صرفنظر از وجود نداشتن رزرو درج شود، میتوان از گزینه -nrc استفاده کرد که درج را اجباری میکند. با این حال، در این حالت VR روی UN تنظیم میشود، زیرا تگ را نمیتوان در دیکشنری یافت.
توضیحات بالا را در مورد نحوه مدیریت درج مقادیر در عناصری با VR ناشناخته ببینید.
ویرایشها (Modifications)
اگر مقدار یک تگ اختصاصی را ویرایش کنید، dcmodify مقدار VR آن را با دیکشنری بررسی نخواهد کرد. بنابراین لطفاً دقت کنید که تنها مقادیری را وارد کنید که با VR تگ مطابقت دارند.
اگر میخواهید مقدار و نمایش مقدار (VR) یک تگ اختصاصی را تغییر دهید، زیرا به تازگی این تگ را به دیکشنری خود افزودهاید، میتوانید آن را با dcmodify حذف کرده و دوباره درج کنید. در این صورت dcmodify از ورودی دیکشنری شما برای تعیین VR صحیح استفاده میکند (همچنین زیربخش درجها را ببینید).
همچنین، توضیحات بالا را در مورد نحوه مدیریت درج مقادیر در عناصری با VR ناشناخته ببینید.
حذفها (Deletions)
هنگامی که از dcmodify برای حذف یک تگ رزرو اختصاصی استفاده میکنید، لطفاً توجه داشته باشید که dcmodify به تگهای اختصاصی که تحت این رزرو هستند دست نمیزند. کاربر موظف است سازگاری بین رزروها و تگهای اختصاصی مرتبط با آنها را مدیریت کند.
برای حذف تگهای اختصاصی غیر رزروی، نکته خاصی وجود ندارد.
تغییر شناسههای یکتا (CHANGING UIDS)
اگر تغییراتی را در تگهای مرتبط در مجموعه داده ('SOP Class UID' و 'SOP Instance UID') از طریق گزینههای حالت درج یا ویرایش اعمال کنید، dcmodify به طور خودکار 'Media Storage SOP Class UID' و 'Media Storage SOP Instance UID' را در متاسرآیند تصحیح خواهد کرد. میتوانید این رفتار را با استفاده از گزینه -nmu غیرفعال کنید.
اگر UIDهای جدید را با -gst، -gse یا -gin تولید کنید، این کار فقط بر UID انتخابی شما تأثیر میگذارد. بنابراین اگر از -gst برای تولید یک 'Study Instance UID' جدید استفاده کنید، 'Series Instance UID' و 'SOP Instance UID' تحت تأثیر قرار نخواهند گرفت! این به شما امکان میدهد هر مقدار را جداگانه تولید کنید. به طور معمول، شما باید UIDهای «زیرین» را نیز ویرایش کنید. به عنوان نقطه ضعفی برای این انعطافپذیری، کاربر باید اطمینان حاصل کند که هنگام ایجاد فایلهای DICOM «جدید» با UIDهای جدید از طریق dcmodify، سایر UIDها در صورت لزوم توسط کاربر بهروزرسانی شوند.
هنگام انتخاب گزینه -gin، تگ متاسرآیند مربوطه ('Media Storage SOP Instance UID') به طور خودکار بهروزرسانی میشود. این رفتار را نمیتوان غیرفعال کرد.
هنگام کار بر روی چندین فایل ورودی، dcmodify هر فایل را به صورت جداگانه پردازش میکند؛ یعنی برای هر فایل به صورت مجزا UID تولید خواهد کرد. به عنوان مثال، هنگام استفاده از گزینه -gst، dcmodify یک Study Instance UID متفاوت را در هر فایل درج میکند، به جای اینکه یک شناسه واحد تولید کند و آن را در تمام فایلهای در حال پردازش بنویسد.
ایجاد فایلهای جدید (CREATING NEW FILES)
گزینه --create-file به dcmodify اجازه میدهد تا در صورتی که فایلی از قبل روی دیسک وجود نداشته باشد، آن را ایجاد کند. این قابلیت میتواند برای ایجاد فایلها از ابتدا با انجام درجهای متوالی با استفاده از گزینههایی مانند --insert به کار رود. این امر بهویژه هنگام ایجاد فایلهای پرسوجو (query) برای ابزارهایی مانند findscu یا movescu میتواند بسیار مفید باشد. در صورتی که هیچ نحو انتقال خروجی خاصی تعریف نشده باشد، dcmodify گزینه Little Endian Explicit Uncompressed را برای خروجی انتخاب میکند. فایلهایی که به تازگی ایجاد میشوند همیشه در قالب فایل DICOM نوشته میشوند، یعنی گزینه --write-dataset همراه با --create-file مجاز نیست. بدین ترتیب، حداقل متاسرآیند نوشته میشود و در شرایطی که هیچ درجی در فراخوانی dcmodify انجام نشود، فایلی با طول صفر بایت ایجاد نخواهد شد.
مقادیر عناصر از فایل (ELEMENT VALUES FROM FILE)
به منظور خواندن مقدار عنصر از یک فایل به جای مشخص کردن آن در خط فرمان، میتوان از گزینههای -mf و -if استفاده کرد. لطفاً توجه داشته باشید که برای عناصر OW، انتظار میرود دادهها دارای ترتیب little endian باشند و در صورت لزوم بایتهای آنها جابهجا (swap) خواهد شد. اندازه فایل باید همیشه یک عدد زوج از بایتها باشد، یعنی هیچ پدینگ خودکاری انجام نمیشود.
نویسههای عام (WILDCARDS)
ابزار dcmodify همچنین استفاده از نویسه عام "*" را برای شماره آیتمها در عبارات مسیر مجاز میداند؛ به عنوان مثال "ContentSequence[*].CodeValue" تمامی ویژگیهای "CodeValue" را در تمامی آیتمهای ContentSequence انتخاب میکند. استفاده از نویسه عام برای تمامی عملیات پایه امکانپذیر است، یعنی گزینههای ویرایش -m، درج -i و پاک کردن -e که این امر به همراه ایجاد خودکار گرههای میانی مسیر، آن را به ابزاری قدرتمند برای ساخت و پردازش مجموعهدادههای پیچیده تبدیل میکند.
گزینههای -ma و -ea برای ویرایش یا حذف تمامی رخدادهای یک عنصر DICOM بر اساس تگ آن، هیچ نویسه عامی را نمیپذیرند و فقط روی عناصر منفرد (یعنی یک نام دیکشنری منفرد یا کلید تگ) کار میکنند.
مثالها (EXAMPLES)
-i --insert:
dcmodify -i "(0010,0010)=A Name" file.dcm
تگ PatientName را در فایل 'file.dcm' در سطح اول درج میکند.
اگر تگ از قبل وجود داشته باشد، گزینه -i آن را بازنویسی میکند! اگر میخواهید
عنصری با تعدد مقدار (value multiplicity) بزرگتر از ۱ (مثلاً ۴) درج کنید،
میتوانید این کار را با دستور زیر انجام دهید: dcmodify -i "(0018,1310)=1\2\3\4"
dcmodify -i "(0008,1111)[0].PatientName=Another Name" *.dcm
تگ PatientName را در اولین آیتم از توالی (0008,1111) درج میکند.
توجه داشته باشید که استفاده از نویسههای عام برای فایلها امکانپذیر است.
همچنین میتوانید مسیرهای طولانیتری برای تگ مشخص کنید (به عنوان مثال:
"(0008,1111)[0].(0008,1111)[1].(0010,0010)=A Third One").
اگر هر بخشی از مسیر، مثلاً توالی یا آیتم "0" وجود نداشته باشد،
به صورت خودکار توسط dcmodify درج میشود.
dcmodify -i "(0008,1111)[*].PatientName=Another Name" *.dcm
تگ PatientName را در _تکتک_ آیتمهای توالی (0008,1111) درج میکند.
توجه داشته باشید که استفاده از نویسههای عام برای فایلها امکانپذیر است.
همچنین میتوانید مسیرهای تگ طولانیتری را نیز مشخص کنید (به عنوان مثال:
"(0008,1111)[*].(0008,1111)[*].(0010,0010)=A Third One").
-if --insert-from-file:
dcmodify -if "PixelData=pixel.raw" file.dcm
محتوای فایل 'pixel.raw' را در عنصر PixelData فایل 'file.dcm' درج میکند.
محتوای فایل همانطور که هست خوانده میشود.
انتظار میرود دادههای OW دارای ترتیب بایت little endian باشند و در صورت
نیاز جابهجا (swap) میشوند. هیچ بررسی برای اطمینان از منطقی بودن
میزان دادهها با توجه به سایر ویژگیها مانند Rows یا Columns انجام نخواهد شد.
-m --modify:
dcmodify -m "(0010,0010)=A Name" file.dcm
تگ (0010,0010) را در سطح اول به "A Name" تغییر میدهد.
این گزینه همچنین مسیرهای طولانیتر تگ را همانطور که در بالا برای -i
نشان داده شد میپذیرد. اگر عنصر برگ یا هر بخش میانی مسیر وجود نداشته باشد،
برخلاف گزینه '-i' درج نمیشود.
dcmodify -m "(0010,0010)=A Name" -imt file.dcm
تگ (0010,0010) را در سطح اول به "A Name" تغییر میدهد. با توجه به گزینه
دادهشده '-imt'، در صورت عدم وجود عنصر/آیتم (یا هر گره میانی در یک مسیر طولانیتر)،
به جای پیام "tag not found"، موفقیت گزارش میشود.
توجه داشته باشید که برای گزینه '-m' آخرین گره در مسیر باید یک عنصر
برگ باشد، یعنی یک توالی یا یک آیتم نباشد.
-mf --modify-from-file:
dcmodify -mf "PixelData=pixel.raw" file.dcm
همانند -if عمل میکند، در صورتی که از قبل عنصر PixelData در 'file.dcm'
وجود داشته باشد. در غیر این صورت هیچ تغییری اعمال نمیشود.
-ma --modify-all:
dcmodify -ma "(0010,0010)=New Name" file.dcm
همانند -m عمل میکند اما بر روی تمام تگهای منطبق یافتشده در 'file.dcm'
اعمال میشود. بنابراین، کل مجموعه داده شامل توالیها را برای تگ (0010,0010)
جستجو کرده و آنها را به "New Name" تغییر میدهد.
-e --erase:
dcmodify -e "(0010,0010)" *.dcm
تگ (0010,0010) را در تمام فایلهای *&.dcm در سطح اول پاک میکند.
این گزینه همچنین مسیرهای طولانیتر تگ را همانطور که در بالا برای -i
نشان داده شد مجاز میداند.
dcmodify -e "(0010,0010)" -imt *.dcm
تگ (0010,0010) را در تمام فایلهای *&.dcm در سطح اول پاک میکند. با توجه به
گزینه دادهشده '-imt'، در صورت عدم وجود عنصر/آیتم (یا هر گره میانی در یک مسیر
طولانیتر)، به جای پیام "tag not found"، موفقیت گزارش میشود.
-ea --erase-all:
dcmodify -ea "(0010,0010)" *.dcm
مشابه -e است، اما در توالیها و آیتمها نیز جستجو میکند.
-ep --erase-private:
dcmodify -ep *.dcm
تمام تگهای اختصاصی (یعنی تگهایی که شماره گروه فرد دارند) را از تمامی
فایلهای منطبق با *&.dcm در دایرکتوری جاری حذف میکند.
-gst --gen-stud-uid:
dcmodify -gst file.dcm
این دستور یک مقدار جدید برای StudyInstanceUID (0020,000d) تولید میکند.
سایر UIDها تغییر نمیکنند!
-gse --gen-ser-uid:
dcmodify -gse file.dcm
این دستور یک مقدار جدید برای SeriesInstanceUID (0020,000e) تولید میکند.
سایر UIDها تغییر نمیکنند!
-gin --gen-inst-uid:
dcmodify -gin file.dcm
این دستور یک مقدار جدید برای SOPInstanceUID (0008,0018) تولید میکند.
مقدار متناظر MediaStorageSOPInstanceUID (0002,0003) به طور خودکار به مقدار
جدید تنظیم میشود. لطفاً توجه داشته باشید که جلوگیری از این بهروزرسانی
متاسرآیند از طریق گزینه -nmu امکانپذیر نیست.
-nmu --no-meta-uid:
dcmodify -m "SOPInstanceUID=[UID]" -nmu *.dcm
این دستور SOPInstanceUID را به [UID] دادهشده تغییر میدهد، اما گزینه -nmu
از تنظیم MediaStorageSOPInstanceUID در متاسرآیند توسط dcmodify جلوگیری میکند.
مدیریت خطا (ERROR HANDLING)
ابزار dcmodify تلاش میکند تا هر یک از عملیات ویرایش مشخصشده در خط فرمان را اجرا کند: اگر یکی از آنها خطایی برگرداند، سایر عملیات به هر حال انجام میشوند. با این حال در صورت بروز هرگونه خطا، فایل تغییریافته ذخیره نمیشود، مگر اینکه گزینه --ignore-errors مشخص شده باشد. اگر این گزینه انتخاب شود، dcmodify به تغییر فایلهای دیگر مشخصشده در خط فرمان نیز ادامه میدهد؛ در غیر این صورت dcmodify پس از اولین فایلی که دارای خطاهای ویرایش باشد خارج میشود.
اگر گزینه --ignore-missing-tags فعال باشد، هرگونه عملیات ویرایش یا پاک کردن (یعنی نه --insert) که به دلیل عدم وجود تگ با شکست مواجه شود، موفق تلقی میشود. این امر در صورتی منطقی است که شخصی بخواهد مطمئن شود تگهای خاصی در فایل وجود ندارند یا — در صورت وجود — روی مقدار خاصی تنظیم شدهاند.
ثبت گزارشها (LOGGING)
سطح گزارشگیری خروجی ابزارهای مختلف خط فرمان و کتابخانههای زیرین میتواند توسط کاربر مشخص شود. به طور پیشفرض، فقط خطاها و هشدارها در جریان خطای استاندارد (stderr) نوشته میشوند. با استفاده از گزینه --verbose پیامهای اطلاعرسانی مانند جزئیات پردازش نیز گزارش میشوند. گزینه --debug میتواند برای دریافت جزئیات بیشتر در مورد فعالیتهای داخلی، به عنوان مثال برای اهداف اشکالزدایی استفاده شود. سایر سطوح گزارشگیری را میتوان با استفاده از گزینه --log-level انتخاب کرد. در حالت --quiet فقط خطاهای مهلک گزارش میشوند. در چنین شرایط خطای بسیار شدیدی، برنامه معمولاً متوقف خواهد شد. برای جزئیات بیشتر در مورد سطوح مختلف گزارشگیری، مستندات ماژول "oflog" را ببینید.
در صورتی که خروجی گزارشگیری باید در فایل نوشته شود (اختیاری با چرخش فایل لاگ)، در syslog (یونیکس) یا گزارش رویدادها (ویندوز)، گزینه --log-config میتواند استفاده شود. این فایل پیکربندی همچنین اجازه میدهد تا فقط پیامهای خاصی به یک جریان خروجی مشخص هدایت شوند و پیامهای خاصی بر اساس ماژول یا برنامهای که در آن تولید میشوند فیلتر گردند. یک نمونه فایل پیکربندی در <etcdir>/logger.cfg ارائه شده است.
خط فرمان (COMMAND LINE)
تمام ابزارهای خط فرمان از نمادگذاری زیر برای پارامترها استفاده میکنند: براکتهای کروشه مقادیر اختیاری را احاطه میکنند (۰-۱)، سه نقطه انتهایی نشان میدهد که چندین مقدار مجاز است (۱-n)، ترکیبی از هر دو به معنای ۰ تا n مقدار است.
گزینههای خط فرمان با یک علامت '+' یا '-' در ابتدا از پارامترها متمایز میشوند. معمولاً ترتیب و موقعیت گزینههای خط فرمان اختیاری است (یعنی میتوانند در هر جایی ظاهر شوند). با این حال، اگر گزینهها مانعةالجمع باشند، آخرین گزینه در سمت راست استفاده میشود. این رفتار مطابق با قوانین استاندارد ارزیابی پوستههای رایج یونیکس است.
علاوه بر این، یک یا چند فایل فرمان را میتوان با استفاده از علامت '@' به عنوان پیشوند نام فایل مشخص کرد (مانند @command.txt). چنین آرگومان فرمانی قبل از هرگونه ارزیابی بیشتر، با محتوای فایل متنی مربوطه جایگزین میشود (فاصلههای متوالی به عنوان یک جداکننده منفرد در نظر گرفته میشوند مگر اینکه بین دو علامت نقلقول قرار گیرند). لطفاً توجه داشته باشید که یک فایل فرمان نمیتواند شامل یک فایل فرمان دیگر باشد. این رویکرد ساده اما مؤثر اجازه میدهد تا ترکیبهای رایج گزینهها/پارامترها را خلاصه کرده و از خط فرمانهای طولانی و گیجکننده جلوگیری شود (یک مثال در فایل <datadir>/dumppat.txt ارائه شده است).
محیط (ENVIRONMENT)
ابزار dcmodify تلاش خواهد کرد تا دیکشنریهای داده DICOM مشخصشده در متغیر محیطی DCMDICTPATH را بارگذاری کند. به طور پیشفرض، یعنی اگر متغیر محیطی DCMDICTPATH تنظیم نشده باشد، فایل <datadir>/dicom.dic بارگذاری خواهد شد مگر اینکه دیکشنری درون خود برنامه تعبیه شده باشد (پیشفرض برای ویندوز).
رفتار پیشفرض باید ترجیح داده شود و متغیر محیطی DCMDICTPATH تنها زمانی استفاده شود که دیکشنریهای داده جایگزین مورد نیاز باشند. متغیر محیطی DCMDICTPATH همان فرمت متغیر PATH پوسته یونیکس را دارد که در آن دو نقطه (":") ورودیها را جدا میکند. در سیستمهای ویندوز، نقطه ویرگول (";") به عنوان جداکننده استفاده میشود. کد دیکشنری داده تلاش خواهد کرد تا هر فایل مشخصشده در متغیر محیطی DCMDICTPATH را بارگذاری کند. در صورتی که هیچ دیکشنری دادهای بارگذاری نشود، خطا خواهد بود.
حق نشر (COPYRIGHT)
Copyright (C) 2003-2025 by OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany.
| Thu Jul 9 2026 18:43:40 | Version 3.7.0 |