处理英文单词换行显示

原创 2007年09月19日 13:54:00

     在smartforms实际使用中经常会遇到换行的情况,如果是中文,那还好办,如果是英文,就经常会出现英文单词分两行显示的情况,因此,我自己写了个处理function,能够纠正这种错误,如果要换行,之前会用空格补足位数。

FUNCTION zsplittext.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(FIXLENGTH) TYPE  I
*"  CHANGING
*"     REFERENCE(ORITEXT) TYPE  STRING
*"----------------------------------------------------------------------

*"AS,DFG HJKL,ASDFJ,SDKF22
*"----------------------------------------------------------------------

  DATA: tmp_text TYPE string,
        char,
        tmp_text1 TYPE string,
        tmp_sub_t TYPE string,
        sub_t TYPE string.
  DATA: textlength TYPE i,
        f_length TYPE i,
*        comm_n TYPE i,
        t_length1 TYPE i,"累加字符串长度
        t_length2 TYPE i,
        t_length3 TYPE i,
        t_rown TYPE i,"
        space_length TYPE i,
        sub_text_len TYPE i.
  DATA: dt_subt1 TYPE TABLE OF string,
        dt_subt2 TYPE TABLE OF string.
  TYPES: BEGIN OF s_subt,
        sub_text TYPE string,
        splitsign(5) TYPE c,
        END OF s_subt.
  DATA: dt_subtext TYPE TABLE OF s_subt WITH HEADER LINE.
  DATA: l_tabix LIKE sy-tabix.

  textlength = STRLEN( oritext ).
  IF textlength > fixlength.
*    comm_n = fixlength - 1.
*    tmp_text = oritext+comm_n(3).
    char = oritext+fixlength(1).
    IF char <> ' ' AND char <> ',' AND char <> '.'.
      SPLIT oritext AT ',' INTO TABLE dt_subt1."先用,分割
*      IF sy-subrc <> 0.
*        APPEND oritext TO dt_subt1.
*      ENDIF.
      LOOP AT dt_subt1 INTO sub_t.
        l_tabix = sy-tabix.
        tmp_sub_t = sub_t.
        CONDENSE tmp_sub_t NO-GAPS.
        IF STRLEN( tmp_sub_t ) < STRLEN( sub_t ).
          SPLIT sub_t AT space INTO TABLE dt_subt2."再用空格分割

          LOOP AT dt_subt2 INTO sub_t.
            dt_subtext-sub_text = sub_t.
            IF sy-tabix = 1.
              dt_subtext-splitsign = ','.
            ELSE.
              dt_subtext-splitsign = 'space'.
            ENDIF.
            APPEND dt_subtext.
          ENDLOOP.
        ELSE.
          dt_subtext-sub_text = sub_t.
          IF l_tabix <> 1.
            dt_subtext-splitsign = ','.
          ENDIF.
          APPEND dt_subtext.
        ENDIF.
      ENDLOOP.

      CLEAR tmp_text.
      LOOP AT dt_subtext.
        t_length1 = STRLEN( tmp_text ).
        t_length3 = t_length1 - t_rown * fixlength.
        sub_text_len = STRLEN( dt_subtext-sub_text ).
        IF t_length1 = 0.
          tmp_text = dt_subtext-sub_text.
        ELSE.
          IF t_length3 < fixlength.
            IF dt_subtext-splitsign = ','.
              CONCATENATE tmp_text dt_subtext-sub_text INTO tmp_text SEPARATED BY ','.
            ELSEIF dt_subtext-splitsign = 'space'.
              CONCATENATE tmp_text dt_subtext-sub_text INTO tmp_text SEPARATED BY space.
            ENDIF.
          ENDIF.

          t_length1 = STRLEN( tmp_text ).
          t_length3 = t_length1 - t_rown * fixlength.

          IF t_length3 = fixlength.
            IF dt_subtext-splitsign = ','.
              CONCATENATE tmp_text ',' INTO tmp_text.
              sub_text_len = sub_text_len + 1.
            ELSEIF dt_subtext-splitsign = 'space'.
              CONCATENATE tmp_text dt_subtext-sub_text INTO tmp_text SEPARATED BY space.
            ENDIF.
          ENDIF.

          t_length1 = STRLEN( tmp_text ).
          t_length3 = t_length1 - t_rown * fixlength.

          IF t_length3 > fixlength.
            t_rown = t_rown + 1.
            f_length = t_rown * fixlength - 1.
            tmp_text1 = tmp_text+f_length(1).

            IF tmp_text1 <> ' ' AND tmp_text1 <> ','.
*             计算需要几个空格来填充一行到末尾
              t_length2 = t_length1 - sub_text_len.
              space_length = fixlength - ( t_length3 - sub_text_len ).
*             先把最后加上的字符串去掉
              tmp_text = tmp_text+0(t_length2).
*             循环加空格
              DO space_length TIMES.
                CONCATENATE tmp_text '' INTO tmp_text SEPARATED BY space.
              ENDDO.
              CONCATENATE tmp_text dt_subtext-sub_text INTO tmp_text.
            ELSE.
              CONCATENATE tmp_text dt_subtext-sub_text INTO tmp_text SEPARATED BY space.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDLOOP.
      oritext = tmp_text.
    ENDIF.
  ENDIF.
ENDFUNCTION.

相关文章推荐

给NGUI 提供支持英文单词换行功能

NGUI 的原始版本是不支持英文单词换行的,他的判断是针对一个一个字符的。但是现在我们游戏有这个需求,就是当换行的位置是一个单词的时候,就把这个单词放到下一行显示。如下: **修改前:this is...
  • pdw_jsp
  • pdw_jsp
  • 2015年09月07日 15:29
  • 1322

自动对齐的TextView 防止英文单词不能换行的问题

项目中显示两行文字要左右对齐,但是原生的TextView 遇到一个英文单词不会把单词分隔 而是自动换到下一行,这就导致排版很难看如图所示第一行没有显示完就换到下一行了 想要不自动换行 就需要自定...

word中设置英文单词按字符换行

 问题: 在word中输入比较长的英文单词,如果单词超过了行尾,则会自动换行,这样就形成了上一行剩下的字数很少,如果是两段对齐,则字符间距会变大;如果左对齐,则会出现右边空出一大行。 ...
  • haelang
  • haelang
  • 2014年09月20日 22:12
  • 1305

css强制html不换行 css强制英文单词断行

css强制html不换行 css强制英文单词断行 强制不换行 div{ white-space:nowrap; } 自动换行 div{ word-wrap: break-word...

【office 2010】word排版之长英文单词自动换行和英文对齐问题

转自:http://blog.sina.com.cn/s/blog_62f9fade0100i3vv.html 问题: 在word中输入比较长的英文单词,如果单词超过了行尾,则会自动换行,...

单词太长导致自动换行,出现空白区域。——word-wrap和word-break(英文单词换行)

写在前面:在写页面的时候,偶尔有时会遇到下图这两种情况,一种是单词过长时会溢出div,一种是直接换行,导致出现空白区域。这两个情景就需要word-wrap、word-break这两个属性出场来解决了。...
  • OBKoro1
  • OBKoro1
  • 2017年04月18日 20:11
  • 550

自动识别英文单词显示(Android+Java)

应用: 在做txt阅读器或者显示英文字符时,要判断一个单词是否被断开啦。如下简单代码能够自动识别单词,并且绘画在屏幕上。 貌似目前很多阅读器,比如百度文库和百阅,都没有对单词处理。看着...
  • synwith
  • synwith
  • 2011年07月19日 10:25
  • 1901

【办公-WORD】取消英文单词或字符串下红色和绿色波浪线的显示

以Microsoft office 2007为例 、 1、取消全部的英文单词或字符串下红色波浪线的显示 2、取消指定的英文单词或字符串下红色波浪线的显示...

js 控制英文自动换行 不截断单词的方法

自己感觉文章逻辑很清晰 像对中文字符的判断 很不错!    无标题

JAVA中常用英文单词简写释义

JAVA中常用英文单词简写释义 关于java ee, ide,jms,jmx,jndi等专业术语的全称问题  API (Application Programming Interf...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:处理英文单词换行显示
举报原因:
原因补充:

(最多只允许输入30个字)