Tuesday, October 7, 2025

Олдскул без CODE символів

 *---------------------------------------------------------------------*

* FORM ZTEXT_WIDTH_PT (версія для ABAP 4.x)

*---------------------------------------------------------------------*

FORM ztext_width_pt USING i_text TYPE c

                    CHANGING e_width TYPE f.


  DATA: lv_len TYPE i,

        lv_char TYPE c LENGTH 1,

        lv_add TYPE f.


  CLEAR: e_width.


  lv_len = STRLEN( i_text ).


  DO lv_len TIMES.

    lv_char = i_text+sy-index-1(1).

    CLEAR lv_add.


    " --- Латиниця великі ---

    IF lv_char CP '[A-Z]'.

      CASE lv_char.

        WHEN 'I'. lv_add = 3.5.

        WHEN 'M' OR 'W'. lv_add = 6.2.

        WHEN OTHERS. lv_add = 5.5.

      ENDCASE.


    " --- Латиниця малі ---

    ELSEIF lv_char CP '[a-z]'.

      CASE lv_char.

        WHEN 'i' OR 'j' OR 'l'. lv_add = 2.8.

        WHEN 'm'. lv_add = 7.0.

        WHEN 'w'. lv_add = 6.0.

        WHEN 'f' OR 't' OR 'r'. lv_add = 3.2.

        WHEN OTHERS. lv_add = 4.8.

      ENDCASE.


    " --- Кирилиця великі ---

    ELSEIF lv_char CP '[А-Я]'.

      CASE lv_char.

        WHEN 'І'. lv_add = 3.5.

        WHEN 'М' OR 'Ш' OR 'Щ' OR 'Ф' OR 'Ю'. lv_add = 7.0.

        WHEN OTHERS. lv_add = 6.0.

      ENDCASE.


    " --- Кирилиця малі ---

    ELSEIF lv_char CP '[а-я]'.

      CASE lv_char.

        WHEN 'і'. lv_add = 2.8.

        WHEN 'м' OR 'ш' OR 'щ' OR 'ф' OR 'ю'. lv_add = 6.5.

        WHEN OTHERS. lv_add = 5.5.

      ENDCASE.


    " --- Цифри ---

    ELSEIF lv_char CP '[0-9]'.

      lv_add = 5.0.


    " --- Пробіл ---

    ELSEIF lv_char = ' '.

      lv_add = 3.0.


    " --- Розділові знаки ---

    ELSEIF lv_char CA '.,-/:;!?()""'''.

      lv_add = 3.5.


    " --- Інше ---

    ELSE.

      lv_add = 5.0.

    ENDIF.


    e_width = e_width + lv_add.

  ENDDO.


ENDFORM.

No comments:

Post a Comment

Dbf не чіпаємо, маніпуляції тільки з itab

 1. Dbf tab містить ВСІ 67-68 полів,  Ztab - тільки ті 25-45 полів що використовуються в продовженні ресурсів, їх і копіюємо Dbf не редагува...