در ادامهٔ بحث نوشتهٔ پیشین در این نوشته به عنوان یک نمونهٔ عملی از نحوهٔ استفاده از رابط برنامهنویسی گنجور رومیزی، من قسمتی از یک فایل docx در دسترس از طریق سایت تصوف ایران -مربوط به اشعار وحدت کرمانشاهی- را به کمک تکه کدی که شرح آن در ادامه میآید به قالب گنجور رومیزی تبدیل کردهام (اصل فایل اینجاست، من آن را دریافت کردهام، با کمک ورد ۲۰۰۷ با پسوند docx ذخیره کرده و آن را در فایل زیپ پروژهٔ مربوط به این مطلب -قابل دریافت از این نشانی– گنجاندهام، بهروزآوری: پروژهٔ بهروز شده را میتوانید از گیتهاب دریافت کنید، از اینجا).
برای انجام این کار باید علاوه بر ویژوال استودیو (با امکان برنامهنویسی برای سکوی .NET ویرایش ۳.۵ یا ۴) کتابخانهٔ برنامهنویسی OpenXML را نیز نصب داشته باشید. این کتابخانه را از این صفحه دریافت و نصب کنید (OpenXMLSDKv2.msi با حجم کمتر از ۴ مگابایت برای مقصود مورد نظر ما کافیست، البته پیشنیاز نصب این کتابخانه سکوی .NET ویرایش ۳.۵ با سرویس پک ۱ است).
پس از نصب کتابخانهٔ یاد شده و ایجاد پروژه، ارجاع متناظر با آن را به فهرست ارجاعهای پروژه اضافه میکنیم تا فضاهای نام مورد نیاز در دسترس قرار گیرند.
برای پیادهسازی تبدیل مورد نظر لازم است الگوی تایپ فایل ورودی را استخراج کنیم. با بررسی ظاهر فایل ورودی الگوی عمومی زیر را مشاهده میکنیم:
بنابراین در ترتیب معمول بازخوانی محتوای این فایل (چگونه فایل تایپ شده): هر مصرع در تمام سلولهای حاوی متن از مصرعهای دیگر با یک break جدا شده است. محتوای سلول اول جدول (۱)، مربوط به مصرعهای اول ابیات است، بعد از این سلول، سلولی خالی داریم (۲)، محتوای سلول بعدی (۳) مربوط به مصرعهای دوم ابیات است، بعد یک سلول خالی (۴) (استثنایی وجود دارد که توضیح میدهم)، بعد سلولی شامل دو مصرع متوالی که مربوط به بیت تخلص شاعر است (۵) و پس از آن تا شعر بعدی یک سلول خالی دیگر داریم (۶).
پس ما در هنگام تبدیل فایل ورودی در هر لحظه انتظار یکی از سه نوع سلول جدول مصرعهای سمت راست، چپ یا وسط را میکشیم:
در صورتی که فایل را بیشتر بررسی کنیم این استثنا را میبینیم:
همچنان که میبینید پس از سلول (۳)، در حالی که انتظار یک سلول خالی را داریم (۴) با یک سلول شامل ادامهٔ مصرعهای اول مواجه میشویم (۱) لذا در صورتی که بعد از سلول شامل محتوای مصرعهای دوم سلول خالی نداشته باشیم، سلول بعدی شامل ادامهٔ مصاریع اول همان شعر است و نه بیت تخلص.
برای بازخوانی فایلهای docx ارجاعهای لازم به کتابخانهٔ OpenXml را اضافه میکنیم تا فضاهای نام مورد نیاز در دسترس قرار گیرند:
با توجه به توضیحی که در مورد نحوهٔ سازماندهی مصاریع در این فایل دادم الگوریتم تبدیل اینچنین است (در کد کامل و قابل اجرای پروژه، کدهای اضافی برای پردازش استثناها و … گنجانده شده که اینجا برای سادهتر شدن مطالعهٔ کد فرایند اصلی حذف شده):
همچنان که از تصاویر و احتمالاً توضیحات بالا پیداست، فایل ورودی اولیهٔ مورد استفادهٔ من دیوان وحدت کرمانشاهی نبوده بلکه دیوان شاه نعمت الله ولی (قابل دریافت از این نشانی) را بررسی کردهام. از آنجا که این دیوان یکدست تایپ نشده و پس از بخش قصاید الگوهای تایپ دیگری دارد (مثلاً بعضی غزلها را بدون بیت تخلص در میانه تایپ کردهاند و …) در تنظیم نهایی مطلب، ورودی یکدستتری را انتخاب کردم و راهکاری نیز برای رفع یک مورد استثنا در فایل ورودی جدید (در پروژهٔ قابل دریافت) پیشبینی کردم. در هر حال سی و خردهای قصیدهٔ ابتدایی شاه نعمت الله نیز توسط سازوکار شرح داده شده در اینجا قابل تبدیل است.
همچنان که پیشتر اشاره کردم کد این پروژه را -.NET ویرایش ۴، ویندوز فرمز، ویژوال C# اکسپرس ۲۰۱۰- از اینجا میتوانید دریافت کنید (نشانی اسمبلی گنجور رومیزی را در کامپایل مجدد احتمالاً باید تصحیح کنید). به عنوان نکتهای که احتمالاً به ذهن خودتان هم میرسد اما یادآوریش ضرری ندارد، اشاره میکنم به این که فایل خروجی را میتوانید فایل پایگاه دادههای اصلی گنجور رومیزی تعیین کنید تا بتوانید خروجی کار را به شکل زنده مشاهده کنید. البته، برنامه در صورت وجود فایل خروجی از کاربر تأییدیهٔ حذف میگیرد و فایل موجود را حذف میکند، مواظب باشید اگر اطلاعات شخصی پشتیبان گرفته نشده در فایل خروجی دارید (نشانهها در گنجور رومیزی) این اطلاعات را از دست ندهید.
حمیدجان امروز سایت رو پبدا کردم البته قبلا با گنجور آشنا بودم ولی نگاه نکرده بودم که کار کیه
آقا دمت گرم خیلی از سایت و کارهات خوش امد
حقیقتا بهت حسودیم شد خیلی کارهات تر و تمیزن
موفق باشید