مشکل اعداد فارسی و استانداردهای ۶۲۱۹ و ۹۱۴۷

یکی از مشکلات پیش روی استانداردهای ماتصا ۶۲۱۹ و ماتصا ۹۱۴۷ عدم پشتیبانی تعداد زیادی از نرم‌افزارهای موجود از اعداد فارسی است. این دسته از نرم‌افزارها به خصوص آنها که قرار است روی این اعداد پردازشی انجام دهند، یا به طور کلی از پذیرش اعداد فارسی سر باز زده یا دچار خطا شده و رفتارهای عجیبی از خود نشان می‌دهند. به طور مثال:

۱- اکسل ۲۰۰۳ اعداد فارسی را به صورت رشته در نظر می‌گیرد و نمی‌تواند عملیات ریاضی مثل جمع و تفریق را بر روی آنها انجام دهد.
۲- در Windows Live Writer اگر به هنگام ایجاد جدول جدید، طول و عرض جدول با اعداد فارسی وارد شود پیغام خطا داده و بسته می‌شود.
۳- صفحه ورود به اینترنت بانک بانک اقتصاد نوین با هر بار وارد کردن اعداد فارسی هشدار می‌دهد که استفاده از این نویسه‌ها غیر مجاز است.
۴- خیلی از نرم‌افزارهای مالی اداری تولید شرکت‌های داخلی با استفاده از MaskEdit به طور کلی مانع از ورود اعداد فارسی در فیلدهای عددی می‌شوند.
۵- …

ماتصا ۹۱۴۷ این مشکل را پیش‌بینی کرده و به همین دلیل اعداد واقع در NumPad را به همان صورت انگلیسی مورد استفاده قرار می‌دهد. اما با عادات کاربران چه کار کنیم؟ آنهایی که عادت دارند برای ورود اعداد از ردیف بالایی صفحه کلید (ردیف زیر کلیدهای F1 تا F12) استفاده کنند را چه کنیم؟ علاوه بر این مشکلاتی هم با ماتصا ۶۲۱۹ موجود است. به عنوان مثال خود ما در بخشی از نرم‌افزار مالی-اداری‌مان که اطلاعات را به قالب‌هایی مثل اکسل export می‌کند دچار مشکل شدیم. ما در این نرم‌افزار استاندارد ماتصا ۶۲۱۹ را رعایت کرده و اعداد را به صورت فارسی نمایش می‌دهیم نه انگلیسی. حال وقتی که این اطلاعات به اکسل Export می‌شوند اکسل قادر نیست بر روی آن‌ها هیچ گونه عملیات ریاضی مثل جمع و میانگین بر روی آنها انجام دهد. علت آن هم این است که اکسل با اعداد فارسی به صورت رشته برخورد می‌کند نه عدد! البته خوشبختانه این مشکل در اکسل ۲۰۰۷ بر طرف شده.

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

همان طور که پیش‌تر اشاره شد اکسل ۲۰۰۳ اعداد فارسی تولید شده توسط نرم‌افزار سازگار با ماتصا ۶۲۱۹ ما را نمی‌فهمید. با این که اکسل ۲۰۰۷ این مشکل را حل کرده ولی چون کارمندان شرکت مشتری ما حاضر نیستند از اکسل ۲۰۰۷ استفاده کنند ما مجبور شدیم یک راه ابتکاری پیدا کرده و با استفاده از ماکروی زیر اعداد فارسی را در خود اکسل به اعداد انگلیسی تبدیل کنیم:

Attribute VB_Name = “Module1”
Sub fa_support()
Attribute fa_support.VB_Description = “Macro recorded 2009/01/20 by mohebbi”
Attribute fa_support.VB_ProcData.VB_Invoke_Func = ” n14″

‘ Macro1 Macro
‘ Macro recorded 2009/01/20 by mohebbi

Cells.Replace What:=ChrW(1776), Replacement:=”0″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1777), Replacement:=”1″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1778), Replacement:=”2″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1779), Replacement:=”3″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1780), Replacement:=”4″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1781), Replacement:=”5″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1782), Replacement:=”6″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1783), Replacement:=”7″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1784), Replacement:=”8″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1785), Replacement:=”9″, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1644), Replacement:=”,”, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=ChrW(1643), Replacement:=”.”, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub

مطالعه این مطالب نیز توصیه می‌شود:

۱- معرفی استاندارد ماتصا ۶۲۱۹ – ISIRI 6219
۲- معرفی استاندارد ۹۱۴۷ – ISIRI 9147

Comments

  1. وحيد نصيري

    سلام
    اين يك نظر شخصي است، مي‌تونيد با آن موافق نباشيد.
    كار شما اساسا اشتباه بوده. قرار نيست دنيا خودش رو با استانداردهاي ما هماهنگ كنه و البته اگر كردند چقدر هم خوب.
    بجاي اينكار بهتر بود هنگام نمايش اعداد را فارسي نمايش مي‌داديد نه هنگام ذخيره.
    شما با اينكار براي تمام نرم افزارهاي موجود مشكل درست مي‌كنيد. نه فقط چند نرم افزار پر مصرف.

  2. افشار محبی

    سلام،

    ما اون اعداد لعنتی را به هنگام ذخیره به همان صورت انگلیسی ذخیره می‌کنیم ولی به هنگام نمایش تبدیل به فارسی می‌کنیم درست همان طور که شما می‌گویید. اما ابزار گزارش ساز ما یعنی SQL Server Reporting Services از همان اطلاعات نمایش داده شده برای export به اکسل و PDF استفاده می‌کند.

    علاوه بر این تاکید به استفاده از اعداد فارسی اساساً جزیی از خود استاندارد جهانی یونیکد است، هر چند که این تاکید در استاندارد ایرانی ۶۲۱۹ هم وجود دارد. آخر همان طور که می‌دانید استاندارد ۶۲۱۹ صرفاً بر اساس استاندارد یونیکد است و عملاً زیر مجموعه‌ای از آن به حساب می‌آید.

    ضمناً من هم مثل بقیه خیلی علاقمند به رفع مشکلات زبان فارسی هستم و اصلا از شنیدن نظر دیگران ناراحت نمی‌شوم ولو کاملا مخالف نظر خودم باشد.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *