SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Unicode преобразование типов C - X



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
den
Старший специалист
Старший специалист



Joined: 11 Oct 2007
Posts: 103

PostPosted: Fri Jul 17, 2009 12:30 pm    Post subject: Unicode преобразование типов C - X Reply with quote

Добрый день! Коллеги, кто имеет опыт переноса программ из неюникодных систем в юникодную, как исправить ошибку?
Quote:
"L_LINE" and "MS_CODES-CHAR_CODE" are type-incompatible

Code:
DATA: gt_lines TYPE TABLE OF line.

PERFORM convert_win1251_to_dos TABLES gt_lines.

*&---------------------------------------------------------------------*
*&      Form  convert_win1251_to_dos
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PT_LINES
*----------------------------------------------------------------------*
FORM convert_win1251_to_dos TABLES pt_lines.

  DATA l_line      TYPE line.

  DATA:
    BEGIN OF ms_codes,
    dos1(33)  TYPE x  VALUE
   '808182838485F0868788898A8B8C8D8E8F909192939495969798999B9A9C9D9E9F',
    dos2(33)  TYPE x  VALUE
   'A0A1A2A3A4A5F1A6A7A8A9AAABACADAEAFE0E1E2E3E4E5E6E7E8E9EBEAECEDEEEF',
    win1(33)  TYPE x  VALUE
   'C0C1C2C3C4C5A8C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DBDADCDDDEDF',
    win2(33)  TYPE x  VALUE
   'E0E1E2E3E4E5B8E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FBFAFCFDFEFF',
    x1        TYPE x,
    x2        TYPE x,
    char_code TYPE x,
  END   OF ms_codes .

*-- Convert Process
  LOOP AT pt_lines INTO l_line.
    DO 256 TIMES VARYING ms_codes-char_code
                    FROM l_line NEXT l_line+1 .

      DO 33 TIMES  VARYING ms_codes-x1
                      FROM ms_codes-win1 NEXT ms_codes-win1+1
                   VARYING ms_codes-x2
                      FROM ms_codes-dos1 NEXT ms_codes-dos1+1.

        IF ms_codes-char_code EQ ms_codes-x1.
          ms_codes-char_code = ms_codes-x2.
          EXIT.
        ENDIF.
      ENDDO.
      DO 33 TIMES  VARYING ms_codes-x1
                      FROM ms_codes-win2 NEXT ms_codes-win2+1
                   VARYING ms_codes-x2
                      FROM ms_codes-dos2 NEXT ms_codes-dos2+1.
        IF ms_codes-char_code EQ ms_codes-x1.
          ms_codes-char_code = ms_codes-x2.
          EXIT.
        ENDIF.
      ENDDO.
    ENDDO.
    MODIFY pt_lines FROM l_line.
  ENDLOOP.

ENDFORM.                    " convert_win1251_to_dos
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 70
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Fri Jul 17, 2009 2:01 pm    Post subject: Reply with quote

Что касается конкретно этой ошибки, то ее можно устранить приведением типов через assign,
Code:
DATA: l_c(1).

FIELDS-SYMBOLS: <X_C> type x,
               <X_X> type x.

...

    DO 256 TIMES VARYING l_c
                    FROM l_line+0(1) NEXT l_line+1(1) RANGE l_line.

                    ASSIGN l_c TO <X_C>  casting.
                    ASSIGN ms_codes-char_code TO <X_X>  casting.
                    <X_X> = <X_C>.

но в целом, думаю, этот код не будет работать, потому что коды символов кирилицы (DOS или WIN) в однобайтовой кодировке и юникодной не совпадают, даже если вы решите использовать только младший байт. Поэтому вам придется или создавать новую таблицу соотвествия DOS <-> WIN, или, что на мой вгляд более правильно, делать преобразования методами встроенных классов:

CL_ABAP_CONV_IN_CE:
Reads data from a container and converts it to the system format. You can also fill structures with data.
CL_ABAP_CONV_OUT_CE:
Converts data from the system format to an external format and writes it to a container.
CL_ABAP_CONV_X2X_CE:
Converts data from one external format to another.
Back to top
View user's profile Send private message Blog Visit poster's website
Crystal_Ra
Старший специалист
Старший специалист



Joined: 12 Mar 2008
Posts: 108
Location: Белгород

PostPosted: Fri Oct 23, 2009 12:19 am    Post subject: Reply with quote

Very Happy если это Z разработка можно поиграть флажком юникода в настройках отчета Razz . А иначе, у вас есть, только, действительно,
одно решение
Code:

assign ... и ... casting


Exclamation собаку съел на этом переходе )) . Shocked ужос как не удобно
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.