如果从数据库中调用的长文本字符串,要在dcl对话框的列表框中显示,由于dcl列表框的局限(没有水平滑动条),会发现超出列表框范围的字符无法显示,为了解决这个问题,可以采用将长字符串按最大长度分割成表,这样可以解决这个问题。
以下是我编写的支持汉字的字符串定长分割成表的函数,希望朋友们指正!- ;; 按照一定的长度,将字符串进行分割成表(支持汉字双字节)
- ;; 参数
- ;; str:要处理的字符串
- ;; MaxLen:分割成表的字符串最大长度
- ;; 返回: 分割为字符串最大长度为MaxLen的表
- (defun StrWrap (str MaxLen / alist pf strc strlist)
- (setq alist (vl-string->list str)
- pf 0
- strc ""
- )
- (while alist
- (if (< pf MaxLen)
- (progn (setq pf (1+ pf))
- (if (< (car alist) 129) ;car返回表中的第一个元素
- (setq strc (strcat strc (chr (car alist)))
- alist (cdr alist) ;返回去掉了第一个元素的表
- )
- (setq strc (strcat strc (chr (car alist)) (chr (cadr alist)))
- ;cadr返回表的第二个元素
- alist (cddr alist) ;cddr返回去掉了前两个元素的表
- )
- )
- )
- (progn
- (setq strlist (cons strc strlist)
- pf 0
- strc ""
- )
- )
- )
- (if (not alist)
- (setq strlist (cons strc strlist))
- ) ;将最后不够最大长度的字符串加进表中
- )
- (reverse strlist)
- )
实例:(StrWrap "出席这次全会的有,中央委员199人,候补中央委员164人。中央纪律检查委员会常务委员会委员和有关方面负责同志列席了会议。党的十八大代表中部分基层同志和专家学者也列席了会议。" 10)结果:_$
STRWRAP
("出席这次全会的有,中" "央委员199人,候补" "中央委员164人。中" "央纪律检查委员会常务" "委员会委员和有关方面" "负责同志列席了会议。" "党的十八大代表中部分" "基层同志和专家学者也" "列席了会议。")
_$
|