处理英文单词换行显示
2007-09-19 13:54
621 查看
在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.
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.
相关文章推荐
- 显示InputDialog输入对话框实现对用户输入的英文单词进行简单处理
- 转css中文英文换行、禁止换行、显示省略号
- word中设置英文单词按字符换行
- CSS英文单词强制换行
- xml Dom parser 读路径显示图片时应注意的问题以及firefox对空格、换行节点的处理方法
- 让英文在单词中换行
- 浏览器显示td内容自动换行问题的处理
- DataGrid中显示数据英文自动换行
- "输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student
- 英文单词换行 css
- 英文单词换行自动加连词符号-
- CSS实现div添加过长的英文字母或数字的内容显示一排而溢出时,进行自动换行
- 英文换行页面显示问题
- textarea 换行显示处理
- css给dom容器定义了宽度,英文和数字显示不换行的解决办法。
- td自动换行时不切断英文单词
- 英文强制换行css 使用css强制英文单词断行代码
- word排版之长英文单词自动换行
- html显示一个长的错误单词换行,内容自动换行
- js截取英文文本(按英语完整单词),超出部分显示"...”