Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7203254
  • 博文数量: 655
  • 博客积分: 10264
  • 博客等级: 上将
  • 技术积分: 8278
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-04 17:47
个人简介

ABAP顾问

文章分类

全部博文(655)

文章存档

2017年(2)

2014年(8)

2013年(3)

2012年(2)

2011年(18)

2010年(102)

2009年(137)

2008年(274)

2007年(134)

分类:

2008-03-19 13:27:08

 
* Only for UNICODE SYSTEM
REPORT  z_barry_down        .
DATA: BEGIN OF itab OCCURS 0 ,
        f1(8) TYPE c,
        f2(6) TYPE c,
        f3(12) TYPE c,
      END OF itab.
DATA: str TYPE string .
START-OF-SELECTION.
  itab-f1 = 'abc    '.
  itab-f2 = 'def    '.
  itab-f3 = '啊ANTF'.
  APPEND itab.
  itab-f1 = '测试'.
  itab-f2 = '中文'.
  itab-f3 = '四啊啊'.
  APPEND itab.
  itab-f1 = '测'.
  itab-f2 = '中文'.
  itab-f3 = '四三三abc'.
  APPEND itab.
  PERFORM download TABLES itab
                   USING 'H:\test4.txt'.
*&---------------------------------------------------------------------*
*&      Form  download
*&---------------------------------------------------------------------*
FORM download TABLES intab
              USING filename TYPE c.
  DATA: BEGIN OF outtab OCCURS 0,
            line TYPE string ,
         END OF outtab.
  DATA: BEGIN OF headtab OCCURS 0 ,
          length    TYPE i ,
          decimals  TYPE i,
          type_kind TYPE c,
          name(30)  TYPE c,
        END OF headtab.
  DATA: tab_key TYPE c VALUE cl_abap_char_utilities=>horizontal_tab ,
        descr_ref TYPE REF TO cl_abap_structdescr,
        o_file TYPE string,
        str TYPE string ,
        n TYPE i ,m TYPE i.
  FIELD-SYMBOLS: TYPE abap_compdescr ,
                 ,
                 TYPE ANY .
  descr_ref ?= cl_abap_typedescr=>describe_by_data( intab ).
  LOOP AT descr_ref->components ASSIGNING .
    MOVE-CORRESPONDING TO headtab.
    APPEND headtab.
  ENDLOOP.
  DESCRIBE TABLE headtab LINES n.
  LOOP AT intab ASSIGNING .
    DO n TIMES.
      ASSIGN COMPONENT sy-index OF STRUCTURE TO .
      READ TABLE headtab INDEX sy-index.
      m = headtab-length / 2 .
      str = .
      PERFORM addspace  USING str m str .
      CONCATENATE outtab-line tab_key str INTO outtab-line.
    ENDDO.
    SHIFT outtab-line.
    APPEND outtab.
    CLEAR outtab.
  ENDLOOP.
  o_file = filename.
  CALL METHOD cl_gui_frontend_services=>gui_download
    EXPORTING
      filename                  = o_file
      filetype                  = 'DAT'
      codepage                  = '8400'
      trunc_trailing_blanks_eol = ' '
    CHANGING
      data_tab                  = outtab[].
ENDFORM.                    "download
*&---------------------------------------------------------------------*
*&      Form  nounicode
*&---------------------------------------------------------------------*
FORM addspace USING value(input) TYPE string
                    needlen TYPE i
                    output TYPE string.
  DATA: asc(120) TYPE c,
        ansilen TYPE i ,
        inlen TYPE i,
        n TYPE i .
  CONCATENATE asc 'abcdefghijklopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' INTO asc .
  CONCATENATE asc ' 0123456789,./;''[]\-=`<>?:"
INTO asc .
  inlen = STRLEN( input ).
  DO inlen TIMES.
    n = sy-index - 1.
    IF NOT asc CS input+n(1).
      ansilen = ansilen + 2 .
    ELSE.
      ansilen = ansilen + 1 .
    ENDIF.
  ENDDO.
  n = needlen - ansilen .
  output = input.
  DO n TIMES.
    CONCATENATE output ' ' INTO output SEPARATED BY space.
  ENDDO.
ENDFORM.                    "addspace
 
 
此程序作废,新程序见:
阅读(5280) | 评论(11) | 转发(0) |
给主人留下些什么吧!~~

qdbarry2008-09-16 12:06:11

如果不需要制表分隔符,把下面几句修改一下即可: PERFORM addspace USING str m str . CONCATENATE outtab-line tab_key str INTO outtab-line. ENDDO. SHIFT outtab-line. APPEND outtab. CLEAR outtab. 修改成: PERFORM addspace USING str m str . * CONCATENATE outtab-line tab_key str INTO outtab-line. CONCATENATE outtab-line str INTO outtab-line . ENDDO. * SHIFT outtab-line. APPEND outtab. CLEAR outtab.

chinaunix网友2008-03-27 16:13:29

哈哈,英雄所见略同啊,这是我写的。 *&---------------------------------------------------------------------* *& Form sub_perf_len *&---------------------------------------------------------------------* * 根据字符实际占用的位置确定其长度 * 中文占两个位,英文、数字、符号等占一个位。 *----------------------------------------------------------------------* * -->P_18 text * <--P_EPTITM_ARKTX text *----------------------------------------------------------------------* FORM sub_perf_len USING ulen

chinaunix网友2008-03-24 15:02:19

UTF-8 占3个字节!!!! TNND HSBC !! 公司名字给35个字节,相当于11个汉字,然后多了的话拆成两行,真TNND有毛病...

qdbarry2008-03-19 20:19:06

:)

yimeng802008-03-19 18:04:13

非常感谢你.. 我都一个星期头疼了.多亏你帮忙. 现在一切OK了... 呵... 祝你天天开心~ 我也要以后努力...把ABAP学好 :)