راه‌حل گام به گام تبدیل داده‌های فارسی بانک‌اطلاعاتی فاکس‌پرو به سایر بانک‌های اطلاعاتی

فرستاده شده: سپتامبر 7, 2009 توسط احسان شریعتی در برنامه نویسی
برچسب‌ها:, , , , ,

آنچه در ادامه می‌خوانید راهکار عملی تبدیل بانک اطلاعاتی فاکس‌پرو تحت داس(شامل داده‌هایی به زبان فارسی) به سایر بانک‌های اطلاعاتی رایج امروزی است.

تصور کنید از شما خواسته شده است، نرم‌افزار شرکتتان را که تحت داس بوده ارتقا دهید و به نسخه ویندوزی و یا حتی تحت وب تبدیل کنید؛ اول قدم تبدیل بانک اطلاعاتی(به احتمال زیاد فاکس‌پرو) به یکی از بانک‌های اطلاعاتی رایج خواهد بود؛ به احتمال زیاد برای انجام چنین کاری سراغ وب خواهید رفت و برای یافتن نرم‌افزار مبدل این کار، واژه‌های کلیدی foxpro database converter را گوگل خواهید کرد، جستجوی شما نتایجی زیادی به شما بر‌می‌گرداند. با کمک یکی از نرم‌افزارهایی که یافته‌اید(نظیر Full Convert Enterprise) اقدام به تبدیل بانک اطلاعتی مورد نظرتان می‌کنید اما با مراجعه به بانک اطلاعاتی جدید می‌بینید که داده‌های فارسی موجود پس از تبدیل به هم ریخته‌اند، در ابتدا شاید تصور کنید که مبدل مورد استفاده‌ی شما موجب خرابی داده‌های فارسی شده است و قصد امتحان مبدل دیگری کنید و یا اینکه مشکل به وجود آمده را در Encoding استفاده شده بدانید و اما در پایان درخواهید یافت مشکل با هیچ‌کدام از راه حل‌های شما حل نخواهد شد.

fox pro convert problems - 1

و اما علت چیست؟ باید بدانید در زمان متداول بودن استفاده از سیستم‌عامل داس هنوز استفاده از استانداردهایی به مانند Unicode رایج نشده بود تا بتوان با بکارگیری آن‌ها به زبان‌های مختلف بنویسند و داس نیز از کدهای اسکی(ASCII) تنها برای نمایش حروف الفبای لاتین، اعداد و کاراکترهای ویژه استفاده می‌کرد.

کدهای اسکی قابل چاپ

با این حال برنامه‌نویسان برای تایپ به زبان‌های دیگر نظیر فارسی در برنامه‌هایشان دست به دامن ابزارهایی می‌شدند، به طور مثال نرم‌افزار کم حجمی به نام (EGAF.COM) که با تبدیل(map کردن) کدهای اسکی غیرقابل چاپ به کاراکترهای فارسی، فارسی نوشتن را امکان پذیر کرده بود.
(یادآوری: اگر کاربر داس بوده‌اید شاید به خاطر بیاورید که قبل اجرای برنامه‌های فارسی EGAF را اجرا می‌کردیم)

احتمالا با خواندن توضیحات بالا متوجه شده‌اید که چرا داده‌های فارسی بانک اطلاعاتی پس  از تبدیل به هم ریخته نشان داده شده‌اند، در واقع این کاراکترهای به هم ریخته همان کاراکترهای اسکی غیر قابل چاپ در داس بوده‌اند که اینک بدین گونه نمایش داده شده اند.

و اما راه حل: در ادامه خواهید دید با تغییر کاراکترها با استفاده از یک برنامه ساده VBScript چگونه مشکل بوجود آمده را حل می‌کنیم.

راه حل قدم به قدم:

1- تهیه نسخه متنی از داده‌ها:
دستورات زیر را در محیط Command بانک اطلاعاتی فاکس‌پرو وارد نمایید:

USE ?
SET PRINTER ON
SET PRINTER TO “C:\DB.txt”
LIST TO PRINTER

(نکته: پس از وارد کردن خط اول لازم است بانک اطلاعاتی خود را انتخاب نمایید.)
با انجام صحیح دستورات بالا دیتابیس شما در یک فایل متنی با نام DB.txt در درایو C کامپیوترتان ذخیره می‌گردد.

2- باز کردن داده‌ها با استفاده از اکسل:
با استفاده از اکسل فایل متنی بالا را باز کنید، پنجره text import wizard باز می‌شود که بایستی از قسمت Original data Type آن گزینه Fixed width، از قسمت File Original گزینه Windows(ANSI) و از قسمت Start Import at Row مقدار یک (1) را وارد کنید.

3- ایجاد ماکرو مبدل:
با استفاده از نرم افزار Visual Basic Editor همراه نرم‌افزار آفیس ماکرو Convert را با کدهای زیر تولید کنید:

Sub convert()
Dim map(255) As Integer
Dim myString As String
Dim myChar As String * 1
For i = 0 To 255
map(i) = i
Next
map(128) = 48: map(129) = 49: map(130) = 50: map(131) = 51:
map(132) = 52: map(133) = 53: map(134) = 54: map(135) = 55:
map(136) = 56: map(137) = 57: map(138) = 161: map(139) = 45:
map(140) = 191: map(141) = 194: map(142) = 198: map(143) = 193:
map(144) = 199: map(145) = 199: map(146) = 200: map(147) = 200:
map(148) = 129: map(149) = 129: map(150) = 202: map(151) = 202:
map(152) = 203: map(153) = 203: map(154) = 204: map(155) = 204:
map(156) = 141: map(157) = 141: map(158) = 205: map(159) = 205:
map(160) = 206: map(161) = 206: map(162) = 207: map(163) = 208:
map(164) = 209: map(165) = 210: map(166) = 142: map(167) = 211:
map(168) = 211: map(169) = 212: map(170) = 212: map(171) = 213:
map(172) = 213: map(173) = 214: map(174) = 214: map(175) = 216:
map(224) = 217: map(225) = 218: map(226) = 218: map(227) = 218:
map(228) = 218: map(229) = 219: map(230) = 219: map(231) = 219:
map(232) = 219: map(233) = 221: map(234) = 221: map(235) = 222:
map(236) = 222: map(237) = 223: map(238) = 223: map(239) = 144:
map(240) = 144: map(241) = 225: map(243) = 225: map(244) = 227:
map(245) = 227: map(246) = 228: map(247) = 228: map(248) = 230:
map(249) = 229: map(250) = 229: map(251) = 229: map(252) = 237:
map(253) = 237: map(254) = 237:
For Each c In Selection
If c.Value <> "" Then
myString = c.Value
temp = ""
For i = Len(myString) To 1 Step -1
myChar = Chr(map(Asc(Mid(myString, i, 1))))
temp = temp + myChar
Next
c.FormulaR1C1 = temp
End If
Next
End Sub

4- اجرای ماکرو و تبدیل داده‌ها به فارسی:
ماکرو convert را بر روی فیلدهایی که داده‌هایی فارسی دارند، اعمال نمایید تا به فارسی تبدیل شوند.

بدین ترتیب داده‌های موجود در بانک اطلاعاتی شما به گونه‌ای در خواهد آمد که در محیط ویندوز نیز قابل مشاهده و استفاده گردد، حالا به راحتی می‌توانید فایل اکسل موجود را به اکسس و سپس با خیالی آسوده به دیتابیس‌های مورد نظرتان تبدیل نمائید.

پی‌نوشت: به کمک و یاری فروم پرشین تولز

Advertisements
دیدگاه‌ها
  1. علیرضا می‌گوید:

    در این مورد پای کنفرانس یکی از دوستان هم قبلا نشسته بودم ، البته اون بیشتر داستان های فکس پرو در دهه 90 و ماجراهایی که بعدا مایکروسافت بوجود اورد رو تعریف کرده بود!

  2. محسن چمن پرا می‌گوید:

    عالی بود اما فارسیش به هم ربخته ست

  3. حسن می‌گوید:

    دستت درد نكنه خيلي خوب بود ولي براي منم فارسیش به هم ربخته ست

  4. محسن می‌گوید:

    سلام
    من بعد از چند بار آزمون و خطا به طور کامل این تبدیل رو انجام دادم ، در چند حرف مثل ی مشکل داشت که البته قابل حل ضمناً اگر برنامه تحت فاکس یا داس هم دارید در پوشه خود برنامه یک پوشه است به نام ریپورت که اگر در خود برنامه گزارشی بگیرید ولی چاپش نکنید در این پوشه ذخیره میشه تبدیل آن خیلی راحت

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s