الانتقال إلى المحتوى

تحويل الارقام إلى حروف مظبوطة 100 × 100


mm_taha

Recommended Posts

هذا الموضوع قد نشر من قبل ولكن اردت ان انشرة مرة أخرى بعد إجراء بعض التعديلات


CREATE OR REPLACE PACKAGE Convert_Number
AS /******************************************************************************
  NAME:       Convert_Number
  PURPOSE:

  REVISIONS:
  Ver        Date        Author           Description
  ---------  ----------  ---------------  ------------------------------------
  1.0        14/06/2005             1. Created this package.
******************************************************************************/
  FUNCTION Get_text (num IN VARCHAR2)
     RETURN VARCHAR2;

  FUNCTION get_possion (i IN NUMBER)
     RETURN NUMBER;
END Convert_Number;
/



/* Formatted on 2005/06/19 15:09 (Formatter Plus v4.8.5) */
CREATE OR REPLACE PACKAGE BODY Convert_Number
AS FUNCTION get_possion (i IN NUMBER)
     RETURN NUMBER
  IS
     p   NUMBER;
  BEGIN p := i MOD 3;

     IF p = 2
     THEN
        p := -1;
     END IF;

     RETURN p;
  END;

  FUNCTION get_text (num IN VARCHAR2)
     RETURN VARCHAR2
  IS
     n                VARCHAR2 (20);
     text             VARCHAR2 (20);
     number_in_text   VARCHAR2 (2000);
     CATEGORY         VARCHAR2 (20);
     follow           VARCHAR2 (2);
     t                VARCHAR2 (20);
     /* the number string in the new order */
     l                NUMBER;                    /* the length of number  */
     m                NUMBER          := 0;
     /* the addition number so l can be devided by 3 */
     loop_counter     NUMBER;
  BEGIN l := LENGTH (num);

     IF l MOD 3 = 1
     THEN
        m := 2;
     ELSIF l MOD 3 = 2
     THEN
        m := 1;
     END IF;

     n := LPAD (num, l + m, 0);

     FOR loop_counter IN 1 .. l + m
     LOOP
        t :=
           t || SUBSTR (n, loop_counter + get_possion (loop_counter - 1), 1);
     END LOOP;

     FOR loop_counter IN REVERSE 1 .. l + m
     LOOP
        IF SUBSTR (t, loop_counter, 1) <> '0'
        THEN
           IF get_possion (loop_counter) = -1
           THEN
              IF     SUBSTR (t, loop_counter, 1) = '1' AND SUBSTR (t, loop_counter + 1, 1) = '1'
              THEN
                 text := 'إحدى ';
              ELSIF SUBSTR (t, loop_counter, 1) = '1' AND l <> 4
              THEN
                 text := 'واحد ';
              ELSIF     SUBSTR (t, loop_counter, 1) = '2' AND SUBSTR (t, loop_counter + 1, 1) = '1'
              THEN
                 text := 'اثنا ';
              ELSIF SUBSTR (t, loop_counter, 1) = '2' AND l <> 4
              THEN
                 text := 'اثنين ';
              ELSIF SUBSTR (t, loop_counter, 1) = '3'
              THEN
                 text := 'ثلاثة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '4'
              THEN
                 text := 'اربعة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '5'
              THEN
                 text := 'خمسة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '6'
              THEN
                 text := 'ستة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '7'
              THEN
                 text := 'سبعة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '8'
              THEN
                 text := 'ثمانية ';
              ELSIF SUBSTR (t, loop_counter, 1) = '9'
              THEN
                 text := 'تسعة ';
              END IF;
           ELSIF get_possion (loop_counter) = 0
           THEN
              IF     SUBSTR (t, loop_counter, 1) = '1' AND SUBSTR (t, loop_counter - 1, 1) = '0'
              THEN
                 text := 'عشرة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '1'
              THEN
                 text := 'عشر ';
              ELSIF SUBSTR (t, loop_counter, 1) = '2'
              THEN
                 text := 'عشرون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '3'
              THEN
                 text := 'ثلاثون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '4'
              THEN
                 text := 'اربعون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '5'
              THEN
                 text := 'خمسون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '6'
              THEN
                 text := 'ستون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '7'
              THEN
                 text := 'سبعون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '8'
              THEN
                 text := 'ثمانون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '9'
              THEN
                 text := 'تسعون ';
              END IF;
           ELSIF get_possion (loop_counter) = 1
           THEN
              IF SUBSTR (t, loop_counter, 1) = '1'
              THEN
                 text := 'مائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '2'
              THEN
                 text := 'مائتين ';
              ELSIF SUBSTR (t, loop_counter, 1) = '3'
              THEN
                 text := 'ثلاثمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '4'
              THEN
                 text := 'اربعمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '5'
              THEN
                 text := 'خمسمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '6'
              THEN
                 text := 'ستمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '7'
              THEN
                 text := 'سبعمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '8'
              THEN
                 text := 'ثمانمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '9'
              THEN
                 text := 'تعسمائة ';
              END IF;
           END IF;
        END IF;

        IF    loop_counter = 1 OR (SUBSTR (t, loop_counter, 1) = '0') OR (loop_counter = 2 AND SUBSTR (t, loop_counter - 1, 1) = '0') OR (loop_counter = 3 AND SUBSTR (t, loop_counter - 2, 2) = '00') OR (    get_possion (loop_counter) = 0 AND SUBSTR (n, loop_counter - 1, 1) = 1
              )
        THEN
           follow := '';
        ELSE
           follow := 'و ';
        END IF;

        IF SUBSTR (n, loop_counter - 1, 1) <> '0'
        THEN
           IF (l + m - loop_counter = 11 AND l > 12)
           THEN
              CATEGORY := 'بليار ';
           ELSIF (l + m - loop_counter = 8 AND l > 9)
           THEN
              CATEGORY := 'بليون ';
           ELSIF (l + m - loop_counter = 5 AND l > 6)
           THEN
              CATEGORY := 'مليون ';
           ELSIF (l + m - loop_counter = 2 AND l = 4 AND SUBSTR (n, 3, 1) = '2'
                 )
           THEN
              CATEGORY := 'الفين ';
           ELSIF (    l + m - loop_counter = 2 AND l = 4 AND SUBSTR (n, 3, 1) NOT IN ('1', '2')
                 )
           THEN
              CATEGORY := 'الاف ';
           ELSIF (l + m - loop_counter = 2 AND l = 5 AND SUBSTR (n, 2, 2) = '10'
                 )
           THEN
              CATEGORY := 'الاف ';
           ELSIF (l + m - loop_counter = 2 AND l > 3)
           THEN
              CATEGORY := 'الف ';
           END IF;
        END IF;

        number_in_text := CATEGORY || follow || text || number_in_text;
        CATEGORY := '';
        text := '';
     END LOOP;

     RETURN number_in_text;
  END;
END Convert_Number;
/



Examples



SQL> SELECT Convert_Number.get_text (16536)
 2    FROM DUAL; CONVERT_NUMBER.GET_TEXT(16536)
--------------------------------------------
ستة عشر الف و خمسمائة و ستة و ثلاثون



SQL> SELECT Convert_Number.get_text (53216536)
 2    FROM DUAL; CONVERT_NUMBER.GET_TEXT(53216536)
-------------------------------------------------------------------
ثلاثة و خمسون مليون و مائتين و ستة عشر الف و خمسمائة و ستة و ثلاثون



SQL> SELECT Convert_Number.get_text (2048)
 2    FROM DUAL; CONVERT_NUMBER.GET_TEXT(2048)
-------------------------------------------
الفين و ثمانية و اربعون




SQL> SELECT Convert_Number.get_text (1000048)
 2    FROM DUAL; CONVERT_NUMBER.GET_TEXT(100048)
-------------------------------------------
واحد مليون و ثمانية و اربعون



تم تحرير الموضوع من قبل المشرف باضافة اخر نسخة من الpackage
المستخدمة في ملف منفصل لسهولة التحميل

CONVERT_NUMBER.zip

رابط هذا التعليق
شارك

  • الردود 28
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

  • banader22

    5

  • mm_taha

    4

  • aza

    1

  • osama80

    1

أكثر المشاركين في هذا الموضوع

الصور المنشورة

جزاك الله خيراً أخي الكريم ولكن هل من الممكن أن تضيف بعض التعديلات القليله ليعطي النتيجة بالهللات ...

أنا أعرف أني أطلب الكثير ...

وإذا أمكنني أن أنشيئ واحد يقوم بتغيير الريال السعودي إلى دولار أمريكي مثلاً سوف أقوم به .

رابط هذا التعليق
شارك

الله يعطيك العافية يا أخ mm_taha طريقة جيدة وأتمنى لك التوفيق وبالنسبة إلى طلب الأخ ابراهيم بخش فقد قمت بعمل طريقة أخرى باسم (التفقيط) وهي مرفقة مع الرسالة وأرجو ان تستفيد منها وما عليك إلا تعديل كلمة دينار إلى ريال وكلمة فلس إلى هلله

convertno.fmb

رابط هذا التعليق
شارك

  • بعد 3 أسابيع...
هذا الموضوع قد نشر من قبل ولكن اردت ان انشرة مرة أخرى بعد إجراء بعض التعديلات


CREATE OR REPLACE PACKAGE Convert_Number
AS /******************************************************************************
   NAME:       Convert_Number
   PURPOSE:

   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        14/06/2005             1. Created this package.
******************************************************************************/
   FUNCTION Get_text (num IN VARCHAR2)
      RETURN VARCHAR2;

   FUNCTION get_possion (i IN NUMBER)
      RETURN NUMBER;
END Convert_Number;
/



/* Formatted on 2005/06/19 15:09 (Formatter Plus v4.8.5) */
CREATE OR REPLACE PACKAGE BODY Convert_Number
AS FUNCTION get_possion (i IN NUMBER)
      RETURN NUMBER
   IS
      p   NUMBER;
   BEGIN p := i MOD 3;

      IF p = 2
      THEN
         p := -1;
      END IF;

      RETURN p;
   END;

   FUNCTION get_text (num IN VARCHAR2)
      RETURN VARCHAR2
   IS
      n                VARCHAR2 (20);
      text             VARCHAR2 (20);
      number_in_text   VARCHAR2 (2000);
      CATEGORY         VARCHAR2 (20);
      follow           VARCHAR2 (2);
      t                VARCHAR2 (20);
      /* the number string in the new order */
      l                NUMBER;                    /* the length of number  */
      m                NUMBER          := 0;
      /* the addition number so l can be devided by 3 */
      loop_counter     NUMBER;
   BEGIN l := LENGTH (num);

      IF l MOD 3 = 1
      THEN
         m := 2;
      ELSIF l MOD 3 = 2
      THEN
         m := 1;
      END IF;

      n := LPAD (num, l + m, 0);

      FOR loop_counter IN 1 .. l + m
      LOOP
         t :=
            t || SUBSTR (n, loop_counter + get_possion (loop_counter - 1), 1);
      END LOOP;

      FOR loop_counter IN REVERSE 1 .. l + m
      LOOP
         IF SUBSTR (t, loop_counter, 1) <> '0'
         THEN
            IF get_possion (loop_counter) = -1
            THEN
               IF     SUBSTR (t, loop_counter, 1) = '1' AND SUBSTR (t, loop_counter + 1, 1) = '1'
               THEN
                  text := 'إحدى ';
               ELSIF SUBSTR (t, loop_counter, 1) = '1' AND l <> 4
               THEN
                  text := 'واحد ';
               ELSIF     SUBSTR (t, loop_counter, 1) = '2' AND SUBSTR (t, loop_counter + 1, 1) = '1'
               THEN
                  text := 'اثنا ';
               ELSIF SUBSTR (t, loop_counter, 1) = '2' AND l <> 4
               THEN
                  text := 'اثنين ';
               ELSIF SUBSTR (t, loop_counter, 1) = '3'
               THEN
                  text := 'ثلاثة ';
               ELSIF SUBSTR (t, loop_counter, 1) = '4'
               THEN
                  text := 'اربعة ';
               ELSIF SUBSTR (t, loop_counter, 1) = '5'
               THEN
                  text := 'خمسة ';
               ELSIF SUBSTR (t, loop_counter, 1) = '6'
               THEN
                  text := 'ستة ';
               ELSIF SUBSTR (t, loop_counter, 1) = '7'
               THEN
                  text := 'سبعة ';
               ELSIF SUBSTR (t, loop_counter, 1) = '8'
               THEN
                  text := 'ثمانية ';
               ELSIF SUBSTR (t, loop_counter, 1) = '9'
               THEN
                  text := 'تسعة ';
               END IF;
            ELSIF get_possion (loop_counter) = 0
            THEN
               IF     SUBSTR (t, loop_counter, 1) = '1' AND SUBSTR (t, loop_counter - 1, 1) = '0'
               THEN
                  text := 'عشرة ';
               ELSIF SUBSTR (t, loop_counter, 1) = '1'
               THEN
                  text := 'عشر ';
               ELSIF SUBSTR (t, loop_counter, 1) = '2'
               THEN
                  text := 'عشرون ';
               ELSIF SUBSTR (t, loop_counter, 1) = '3'
               THEN
                  text := 'ثلاثون ';
               ELSIF SUBSTR (t, loop_counter, 1) = '4'
               THEN
                  text := 'اربعون ';
               ELSIF SUBSTR (t, loop_counter, 1) = '5'
               THEN
                  text := 'خمسون ';
               ELSIF SUBSTR (t, loop_counter, 1) = '6'
               THEN
                  text := 'ستون ';
               ELSIF SUBSTR (t, loop_counter, 1) = '7'
               THEN
                  text := 'سبعون ';
               ELSIF SUBSTR (t, loop_counter, 1) = '8'
               THEN
                  text := 'ثمانون ';
               ELSIF SUBSTR (t, loop_counter, 1) = '9'
               THEN
                  text := 'تسعون ';
               END IF;
            ELSIF get_possion (loop_counter) = 1
            THEN
               IF SUBSTR (t, loop_counter, 1) = '1'
               THEN
                  text := 'مائة ';
               ELSIF SUBSTR (t, loop_counter, 1) = '2'
               THEN
                  text := 'مائتين ';
               ELSIF SUBSTR (t, loop_counter, 1) = '3'
               THEN
                  text := 'ثلاثمائة ';
               ELSIF SUBSTR (t, loop_counter, 1) = '4'
               THEN
                  text := 'اربعمائة ';
               ELSIF SUBSTR (t, loop_counter, 1) = '5'
               THEN
                  text := 'خمسمائة ';
               ELSIF SUBSTR (t, loop_counter, 1) = '6'
               THEN
                  text := 'ستمائة ';
               ELSIF SUBSTR (t, loop_counter, 1) = '7'
               THEN
                  text := 'سبعمائة ';
               ELSIF SUBSTR (t, loop_counter, 1) = '8'
               THEN
                  text := 'ثمانمائة ';
               ELSIF SUBSTR (t, loop_counter, 1) = '9'
               THEN
                  text := 'تعسمائة ';
               END IF;
            END IF;
         END IF;

         IF    loop_counter = 1 OR (SUBSTR (t, loop_counter, 1) = '0') OR (loop_counter = 2 AND SUBSTR (t, loop_counter - 1, 1) = '0') OR (loop_counter = 3 AND SUBSTR (t, loop_counter - 2, 2) = '00') OR (    get_possion (loop_counter) = 0 AND SUBSTR (n, loop_counter - 1, 1) = 1
               )
         THEN
            follow := '';
         ELSE
            follow := 'و ';
         END IF;

         IF SUBSTR (n, loop_counter - 1, 1) <> '0'
         THEN
            IF (l + m - loop_counter = 11 AND l > 12)
            THEN
               CATEGORY := 'بليار ';
            ELSIF (l + m - loop_counter = 8 AND l > 9)
            THEN
               CATEGORY := 'بليون ';
            ELSIF (l + m - loop_counter = 5 AND l > 6)
            THEN
               CATEGORY := 'مليون ';
            ELSIF (l + m - loop_counter = 2 AND l = 4 AND SUBSTR (n, 3, 1) = '2'
                  )
            THEN
               CATEGORY := 'الفين ';
            ELSIF (    l + m - loop_counter = 2 AND l = 4 AND SUBSTR (n, 3, 1) NOT IN ('1', '2')
                  )
            THEN
               CATEGORY := 'الاف ';
            ELSIF (l + m - loop_counter = 2 AND l = 5 AND SUBSTR (n, 2, 2) = '10'
                  )
            THEN
               CATEGORY := 'الاف ';
            ELSIF (l + m - loop_counter = 2 AND l > 3)
            THEN
               CATEGORY := 'الف ';
            END IF;
         END IF;

         number_in_text := CATEGORY || follow || text || number_in_text;
         CATEGORY := '';
         text := '';
      END LOOP;

      RETURN number_in_text;
   END;
END Convert_Number;
/



Examples



SQL> SELECT Convert_Number.get_text (16536)
  2    FROM DUAL; CONVERT_NUMBER.GET_TEXT(16536)
--------------------------------------------
ستة عشر الف و خمسمائة و ستة و ثلاثون



SQL> SELECT Convert_Number.get_text (53216536)
  2    FROM DUAL; CONVERT_NUMBER.GET_TEXT(53216536)
-------------------------------------------------------------------
ثلاثة و خمسون مليون و مائتين و ستة عشر الف و خمسمائة و ستة و ثلاثون



SQL> SELECT Convert_Number.get_text (2048)
  2    FROM DUAL; CONVERT_NUMBER.GET_TEXT(2048)
-------------------------------------------
الفين و ثمانية و اربعون




SQL> SELECT Convert_Number.get_text (1000048)
  2    FROM DUAL; CONVERT_NUMBER.GET_TEXT(100048)
-------------------------------------------
واحد مليون و ثمانية و اربعون


ارك الله فيك
والله انو عمل ممتاز
ما شاء الله
رابط هذا التعليق
شارك

  • بعد 4 شهور...

هذا التعديل بعد إضافة العملة حيث يمكن تغيرها او إضافة عملا أخرى

/* Formatted on 2005/11/23 13:39 (Formatter Plus v4.8.5) */
CREATE OR REPLACE PACKAGE convert_number
AS
  FUNCTION get_text (num IN VARCHAR2)
     RETURN VARCHAR2;

  FUNCTION get_possion (i IN NUMBER)
     RETURN NUMBER;

  FUNCTION to_text (num IN VARCHAR2)
     RETURN VARCHAR2;

  FUNCTION to_text (num IN VARCHAR2, cur IN VARCHAR2)
     RETURN VARCHAR2;
END convert_number;
/




CREATE OR REPLACE PACKAGE BODY convert_number
AS
  FUNCTION get_possion (i IN NUMBER)
     RETURN NUMBER
  IS
     p   NUMBER;
  BEGIN
     p := i MOD 3;

     IF p = 2
     THEN
        p := -1;
     END IF;

     RETURN p;
  END;

  FUNCTION get_text (num IN VARCHAR2)
     RETURN VARCHAR2
  IS
     n                VARCHAR2 (20);
     text             VARCHAR2 (20);
     number_in_text   VARCHAR2 (2000);
     CATEGORY         VARCHAR2 (20);
     follow           VARCHAR2 (2);
     t                VARCHAR2 (20);
     /* the number string in the new order */
     l                NUMBER;                    /* the length of number  */
     m                NUMBER          := 0;
     /* the addition number so l can be devided by 3 */
     loop_counter     NUMBER;
  BEGIN
     l := LENGTH (num);

     IF l MOD 3 = 1
     THEN
        m := 2;
     ELSIF l MOD 3 = 2
     THEN
        m := 1;
     END IF;

     n := LPAD (num, l + m, 0);

     FOR loop_counter IN 1 .. l + m
     LOOP
        t :=
           t || SUBSTR (n, loop_counter + get_possion (loop_counter - 1), 1);
     END LOOP;

     FOR loop_counter IN REVERSE 1 .. l + m
     LOOP
        IF SUBSTR (t, loop_counter, 1) <> '0'
        THEN
           IF get_possion (loop_counter) = -1
           THEN
              IF     SUBSTR (t, loop_counter, 1) = '1'
                 AND SUBSTR (t, loop_counter + 1, 1) = '1'
              THEN
                 text := 'إحدى ';
              ELSIF     SUBSTR (t, loop_counter, 1) = '1'
                    AND (l = 4 AND loop_counter <> 2)
              THEN
                 text := 'واحد ';
              ELSIF SUBSTR (t, loop_counter, 1) = '1' AND l <> 4
              THEN
                 text := 'واحد ';
              ELSIF     SUBSTR (t, loop_counter, 1) = '2'
                    AND SUBSTR (t, loop_counter + 1, 1) = '1'
              THEN
                 text := 'اثنا ';
              ELSIF     SUBSTR (t, loop_counter, 1) = '2'
                    AND (l = 4 AND loop_counter <> 2)
              THEN
                 text := 'اثنين ';
              ELSIF SUBSTR (t, loop_counter, 1) = '2' AND l <> 4
              THEN
                 text := 'اثنين ';
              ELSIF SUBSTR (t, loop_counter, 1) = '3'
              THEN
                 text := 'ثلاثة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '4'
              THEN
                 text := 'اربعة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '5'
              THEN
                 text := 'خمسة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '6'
              THEN
                 text := 'ستة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '7'
              THEN
                 text := 'سبعة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '8'
              THEN
                 text := 'ثمانية ';
              ELSIF SUBSTR (t, loop_counter, 1) = '9'
              THEN
                 text := 'تسعة ';
              END IF;
           ELSIF get_possion (loop_counter) = 0
           THEN
              IF     SUBSTR (t, loop_counter, 1) = '1'
                 AND SUBSTR (t, loop_counter - 1, 1) = '0'
              THEN
                 text := 'عشرة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '1'
              THEN
                 text := 'عشر ';
              ELSIF SUBSTR (t, loop_counter, 1) = '2'
              THEN
                 text := 'عشرون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '3'
              THEN
                 text := 'ثلاثون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '4'
              THEN
                 text := 'اربعون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '5'
              THEN
                 text := 'خمسون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '6'
              THEN
                 text := 'ستون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '7'
              THEN
                 text := 'سبعون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '8'
              THEN
                 text := 'ثمانون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '9'
              THEN
                 text := 'تسعون ';
              END IF;
           ELSIF get_possion (loop_counter) = 1
           THEN
              IF SUBSTR (t, loop_counter, 1) = '1'
              THEN
                 text := 'مائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '2'
              THEN
                 text := 'مائتين ';
              ELSIF SUBSTR (t, loop_counter, 1) = '3'
              THEN
                 text := 'ثلاثمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '4'
              THEN
                 text := 'اربعمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '5'
              THEN
                 text := 'خمسمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '6'
              THEN
                 text := 'ستمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '7'
              THEN
                 text := 'سبعمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '8'
              THEN
                 text := 'ثمانمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '9'
              THEN
                 text := 'تسعمائة ';
              END IF;
           END IF;
        END IF;

        IF    loop_counter = 1
           OR (SUBSTR (t, loop_counter, 1) = '0')
           OR (loop_counter = 2 AND SUBSTR (t, loop_counter - 1, 1) = '0')
           OR (loop_counter = 3 AND SUBSTR (t, loop_counter - 2, 2) = '00')
           OR (    get_possion (loop_counter) = 0
               AND SUBSTR (n, loop_counter - 1, 1) = 1
              )
        THEN
           follow := '';
        ELSE
           follow := 'و ';
        END IF;

        IF SUBSTR (n, loop_counter - 3, 3) <> '000'
        THEN
           IF (l + m - loop_counter = 11 AND l > 12)
           THEN
              CATEGORY := 'بليار ';
           ELSIF (l + m - loop_counter = 8 AND l > 9)
           THEN
              CATEGORY := 'بليون ';
           ELSIF (l + m - loop_counter = 5 AND l > 6)
           THEN
              CATEGORY := 'مليون ';
           ELSIF (l + m - loop_counter = 2 AND l = 4
                  AND SUBSTR (n, 3, 1) = '2'
                 )
           THEN
              CATEGORY := 'الفين ';
           ELSIF (    l + m - loop_counter = 2
                  AND l = 4
                  AND SUBSTR (n, 3, 1) NOT IN ('1', '2')
                 )
           THEN
              CATEGORY := 'الاف ';
           ELSIF (l + m - loop_counter = 2 AND l = 5
                  AND SUBSTR (n, 2, 2) = '10'
                 )
           THEN
              CATEGORY := 'الاف ';
           ELSIF (l + m - loop_counter = 2 AND l > 3)
           THEN
              CATEGORY := 'الف ';
           END IF;
        END IF;

        number_in_text := CATEGORY || follow || text || number_in_text;
        CATEGORY := '';
        text := '';
     END LOOP;

     RETURN number_in_text;
  END;
END convert_number;
/



Examples
SELECT convert_number.to_text (.235, 'USD')
 FROM DUAL

     فقط  اربعة و عشرون  سنت لا غير


SELECT convert_number.to_text (12435.2, 'EGP')
 FROM DUAL

 فقط اثنا عشر الف و اربعمائة و خمسة و ثلاثون  جنيه  و عشرون  قرش لا غير


SELECT convert_number.to_text (100435.3032356, 'SR')
 FROM DUAL

 فقط مائة الف و اربعمائة و خمسة و ثلاثون  ريال  و ثلاثون  هلله لا غير



SELECT convert_number.to_text (1250000023)
 FROM DUAL

واحد بليون و مائتين و خمسون مليون و ثلاثة و عشرون 

رابط هذا التعليق
شارك

  • بعد 3 أسابيع...

بسم الله الرحمن الرحيم

الأخ/ طه

انا احد أعضاء منتدى مجموعة مستخدمي اوراكل العرب
وقد استفدت ( حامداً لله ) من الدالة التي وضعتها في المنتدى، الخاصة بتحويل الارقام الى كتابة ولكني بعد استخدامها وجدت بعض الأشياء التي يجب ان تعيد النظر فيها وهي كالتالي:
1- الدالة لا تدعم الفاصلة العشرية
2- عند كتابة الرقم (10002) يقوم بكتابته على الشكل عشرة و اثنين ين ياباني فقط لاغيـــر
3- عند كتابة الرقم (2002) يقوم بكتابته على الشكل الفين و ين ياباني فقط لاغيـــر

هل يمكنك اعادة النظر في الدالة وارساله الي على هذا الايميل وسأكون شاكرا لك

واذا لم تجد الوقت لذلك هل يمكنك شرحها لي (مفهومها والية عملها) وانا سأتكفل بالباقي وسأنشرها باسمك

وأرجو أن يكون ذلك بأسرع وقت ممكن لحاجتي الضرورية لها

أخوك
عادل حسام
اليمن

رابط هذا التعليق
شارك

اخواني مشكورين على الجهد المبذول ولكن بعد إذنكم انا حاب استخدم الداله او اضيفها على البرنامج عندي اي على الديفلوبر افيدوني هل اضيف txt او اضيف desplay item

اعذروني لأنني مبتدأ واحاول استفيد

رابط هذا التعليق
شارك

شباب مشكوريين على الجهد الرائع وماشاء الكل كان محتاج مثل هذه البكجات الحلوة اللي تثري اي برنامج ولكن اخواني اود ان اضيف هذا الباكج إلى برنامجي اي اضيفه إلى الفورم بصراحة حاولت ان انشئ له package space و package body ولكن لا يقبل هذا طبعاَ بعد إضافة item من نوع text item في data base

ارجو الإستفادة من هذا الموضوع بقدر الإمكان
مع العلم انني مبتدأ
ولكم جزيل الشكر

post-19872-1135501400_thumb.jpg

رابط هذا التعليق
شارك

SQL> SELECT Convert_Number.get_text (1000048)
  2    FROM DUAL; CONVERT_NUMBER.GET_TEXT(100048)
-------------------------------------------
واحد مليون و ثمانية و اربعون


مشكورين على المشاركات الحلوه والمفيده وانا عندي سؤال في المثال الي فوق هل استطيع الاكتفاء بكتابه:

مليون و ثمانية و اربعون بدلا من واحد مليون و ثمانية و اربعون

وشكراااا :D :( :)
رابط هذا التعليق
شارك

يا اخ mm_taha مشكور على الجهد المبذول اتمنى ان تساعدني على اضافة هذا العمل لمشروعي اي اضافته على الفورم اذا ممكن وعلى فكرة انا حاولت إضافة هذا العمل بعمل pacakage space و package body وهذا طبعا بعد اضافة حقل للجدول وهو text ولكن كان دائما يظهر لي error على اساس انه المصادر غلط ارجو المساعدة في هذا الجانب .

رابط هذا التعليق
شارك

معزرة أخ mo_gho فعلا هذة الباكج بودى ناقصة الدالة to_text
معزرة مرة أخرى الى الجميع ولكن هذا الخطأ غير مقصود وهذة هى الباكج الصحيحة


CREATE OR REPLACE PACKAGE convert_number
AS
  FUNCTION get_text (num IN VARCHAR2)
     RETURN VARCHAR2;

  FUNCTION get_possion (i IN NUMBER)
     RETURN NUMBER;

  FUNCTION to_text (num IN VARCHAR2)
     RETURN VARCHAR2;

  FUNCTION to_text (num IN VARCHAR2, cur IN VARCHAR2)
     RETURN VARCHAR2;
END convert_number;
/



CREATE OR REPLACE PACKAGE BODY convert_number
AS
  FUNCTION get_possion (i IN NUMBER)
     RETURN NUMBER
  IS
     p   NUMBER;
  BEGIN
     p := i MOD 3;

     IF p = 2
     THEN
        p := -1;
     END IF;

     RETURN p;
  END;

  FUNCTION get_text (num IN VARCHAR2)
     RETURN VARCHAR2
  IS
     n                VARCHAR2 (20);
     text             VARCHAR2 (20);
     number_in_text   VARCHAR2 (2000);
     CATEGORY         VARCHAR2 (20);
     follow           VARCHAR2 (2);
     t                VARCHAR2 (20);
     /* the number string in the new order */
     l                NUMBER;                    /* the length of number  */
     m                NUMBER          := 0;
     /* the addition number so l can be devided by 3 */
     loop_counter     NUMBER;
  BEGIN
     l := LENGTH (num);

     IF l MOD 3 = 1
     THEN
        m := 2;
     ELSIF l MOD 3 = 2
     THEN
        m := 1;
     END IF;

     n := LPAD (num, l + m, 0);

     FOR loop_counter IN 1 .. l + m
     LOOP
        t :=
           t || SUBSTR (n, loop_counter + get_possion (loop_counter - 1), 1);
     END LOOP;

     FOR loop_counter IN REVERSE 1 .. l + m
     LOOP
        IF SUBSTR (t, loop_counter, 1) <> '0'
        THEN
           IF get_possion (loop_counter) = -1
           THEN
              IF     SUBSTR (t, loop_counter, 1) = '1'
                 AND SUBSTR (t, loop_counter + 1, 1) = '1'
              THEN
                 text := 'إحدى ';
              ELSIF     SUBSTR (t, loop_counter, 1) = '1'
                    AND (l = 4 AND loop_counter <> 2)
              THEN
                 text := 'واحد ';
              ELSIF SUBSTR (t, loop_counter, 1) = '1' AND l <> 4
              THEN
                 text := 'واحد ';
              ELSIF     SUBSTR (t, loop_counter, 1) = '2'
                    AND SUBSTR (t, loop_counter + 1, 1) = '1'
              THEN
                 text := 'اثنا ';
              ELSIF     SUBSTR (t, loop_counter, 1) = '2'
                    AND (l = 4 AND loop_counter <> 2)
              THEN
                 text := 'اثنين ';
              ELSIF SUBSTR (t, loop_counter, 1) = '2' AND l <> 4
              THEN
                 text := 'اثنين ';
              ELSIF SUBSTR (t, loop_counter, 1) = '3'
              THEN
                 text := 'ثلاثة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '4'
              THEN
                 text := 'اربعة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '5'
              THEN
                 text := 'خمسة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '6'
              THEN
                 text := 'ستة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '7'
              THEN
                 text := 'سبعة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '8'
              THEN
                 text := 'ثمانية ';
              ELSIF SUBSTR (t, loop_counter, 1) = '9'
              THEN
                 text := 'تسعة ';
              END IF;
           ELSIF get_possion (loop_counter) = 0
           THEN
              IF     SUBSTR (t, loop_counter, 1) = '1'
                 AND SUBSTR (t, loop_counter - 1, 1) = '0'
              THEN
                 text := 'عشرة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '1'
              THEN
                 text := 'عشر ';
              ELSIF SUBSTR (t, loop_counter, 1) = '2'
              THEN
                 text := 'عشرون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '3'
              THEN
                 text := 'ثلاثون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '4'
              THEN
                 text := 'اربعون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '5'
              THEN
                 text := 'خمسون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '6'
              THEN
                 text := 'ستون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '7'
              THEN
                 text := 'سبعون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '8'
              THEN
                 text := 'ثمانون ';
              ELSIF SUBSTR (t, loop_counter, 1) = '9'
              THEN
                 text := 'تسعون ';
              END IF;
           ELSIF get_possion (loop_counter) = 1
           THEN
              IF SUBSTR (t, loop_counter, 1) = '1'
              THEN
                 text := 'مائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '2'
              THEN
                 text := 'مائتين ';
              ELSIF SUBSTR (t, loop_counter, 1) = '3'
              THEN
                 text := 'ثلاثمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '4'
              THEN
                 text := 'اربعمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '5'
              THEN
                 text := 'خمسمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '6'
              THEN
                 text := 'ستمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '7'
              THEN
                 text := 'سبعمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '8'
              THEN
                 text := 'ثمانمائة ';
              ELSIF SUBSTR (t, loop_counter, 1) = '9'
              THEN
                 text := 'تسعمائة ';
              END IF;
           END IF;
        END IF;

        IF    loop_counter = 1
           OR (SUBSTR (t, loop_counter, 1) = '0')
           OR (loop_counter = 2 AND SUBSTR (t, loop_counter - 1, 1) = '0')
           OR (loop_counter = 3 AND SUBSTR (t, loop_counter - 2, 2) = '00')
           OR (    get_possion (loop_counter) = 0
               AND SUBSTR (n, loop_counter - 1, 1) = 1
              )
        THEN
           follow := '';
        ELSE
           follow := 'و ';
        END IF;

        IF SUBSTR (n, loop_counter - 3, 3) <> '000'
        THEN
           IF (l + m - loop_counter = 11 AND l > 12)
           THEN
              CATEGORY := 'بليار ';
           ELSIF (l + m - loop_counter = 8 AND l > 9)
           THEN
              CATEGORY := 'بليون ';
           ELSIF (l + m - loop_counter = 5 AND l > 6)
           THEN
              CATEGORY := 'مليون ';
           ELSIF (l + m - loop_counter = 2 AND l = 4
                  AND SUBSTR (n, 3, 1) = '2'
                 )
           THEN
              CATEGORY := 'الفين ';
           ELSIF (    l + m - loop_counter = 2
                  AND l = 4
                  AND SUBSTR (n, 3, 1) NOT IN ('1', '2')
                 )
           THEN
              CATEGORY := 'الاف ';
           ELSIF (l + m - loop_counter = 2 AND l = 5
                  AND SUBSTR (n, 2, 2) = '10'
                 )
           THEN
              CATEGORY := 'الاف ';
           ELSIF (l + m - loop_counter = 2 AND l > 3)
           THEN
              CATEGORY := 'الف ';
           END IF;
        END IF;

        number_in_text := CATEGORY || follow || text || number_in_text;
        CATEGORY := '';
        text := '';
     END LOOP;

     RETURN number_in_text;
  END;

  FUNCTION to_text (num IN VARCHAR2)
     RETURN VARCHAR2
  IS
     str   VARCHAR2 (10000);
  BEGIN
     str := get_text (TRUNC (num));
     RETURN str;
  END;

  FUNCTION to_text (num IN VARCHAR2, cur IN VARCHAR2)
     RETURN VARCHAR2
  IS
     str            VARCHAR2 (10000);
     integer_v      NUMBER;
     integer_str    VARCHAR2 (10000);
     integer_cur    VARCHAR2 (10000);
     fraction_v     NUMBER;
     fraction_str   VARCHAR2 (10000);
     fraction_cur   VARCHAR2 (10000);
  BEGIN
     integer_v := TRUNC (num);
     fraction_v := (ROUND (num, 2) - TRUNC (num)) * 100;

     IF cur = 'EGP'
     THEN
        integer_cur := ' جنيه';
        fraction_cur := ' قرش';
     ELSIF cur = 'USD'
     THEN
        integer_cur := ' دولار';
        fraction_cur := ' سنت';
     ELSIF cur = 'SR'
     THEN
        integer_cur := ' ريال';
        fraction_cur := ' هلله';
     END IF;

     IF integer_v = 0
     THEN
        integer_str := TO_CHAR (NULL);
     ELSE
        integer_str := get_text (integer_v) || integer_cur;
     END IF;

     IF fraction_v = 0
     THEN
        fraction_str := TO_CHAR (NULL);
     ELSE
        IF integer_v = 0
        THEN
           fraction_str := get_text (fraction_v) || fraction_cur;
        ELSE
           fraction_str := ' و ' || get_text (fraction_v) || fraction_cur;
        END IF;
     END IF;

     str := integer_str || ' ' || fraction_str;
     RETURN '  فقط ' || str || ' لا غير';
  END;
END convert_number;
/

رابط هذا التعليق
شارك

بسم الله الرحمن الرحيم

ياشباب يعطيكم الف عافية على الجهد المطلوب لكن بصراحة عندي طلب بسيط بصراحة واجهت صعوبة في إضافة هذا الكود على البرنامج اللي عندي في الديفيلوبر .
الرجاء المساعدة بتبيين الخطوات

رابط هذا التعليق
شارك

  • بعد 5 شهور...

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل



×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية