- 在线时间
- 0 小时
- 最后登录
- 2010-10-21
- 注册时间
- 2010-5-14
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 69 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 26
- 相册
- 0
- 日志
- 0
- 记录
- 2
- 帖子
- 9
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 2
升级   22.11% 该用户从未签到
- 自我介绍
- 用数学管理田间地头。
 |
最近一直在学习Matlab,渐渐地感觉到了它的魅力,也遇到了一些难题,今天我就说一个问题,关于字符串加入回车问题。
做一个GUI,上面有个Edit框,用
set(handles.edit1,'string',{handles.StrCurrent(1:iLineSize*1),handles.StrCurrent(iLineSize*1+1:iLineSize*2)}
生成两行字符串,显示正确,两行字符。
但是在把字符串复制到剪贴板时候,发现两行字符串变成了一行,命令如下:
strdata = get(handles.edit1,'string');
strdata5 = '';
strdata4 = sprintf('\n');
strdata1 = char(strdata(1,1));
strdata2 = char(strdata(2,1));
strdata3 = strcat(strdata1,strdata4,strdata2);
strdata5 = strcat(strdata5,strdata4,strdata3);
strdata5 = strcat(strdata5,strdata4);
clipboard('copy',strdata5);
上面的命令中,我已经加入了回车,可惜不成功。
经过单步跟踪发现,是strcat函数有限制:
if ~isempty(str) && (str(end) == 0 || isspace(str(end)))
str = char(deblank(str));
end
在判断回车时,(str(end) == 0 || isspace(str(end)))这个条件是成立的,因此回车被删除。
除非你在回车左右加上可显示的ASCII字符才行,但是这又违背了我们的初衷:
strdata4 = sprintf('a\na');
最后没有办法,只有把strcat函数上面的判断语句
isspace(str(end)) 注释掉之后成功复制为两行字符串到剪贴板。
为了发布自己的程序时也可以实现回车加入字符串,只有在上面几句程序中用自己的函数my_strcat来替代strcat函数。
strdata = get(handles.edit1,'string');
strdata5 = '';
strdata4 = sprintf('\n');
strdata1 = char(strdata(1,1));
strdata2 = char(strdata(2,1));
strdata3 = my_strcat(strdata1,strdata4,strdata2);
strdata5 = my_strcat(strdata5,strdata4,strdata3);
strdata5 = my_strcat(strdata5,strdata4);
clipboard('copy',strdata5);
|
zan
-
总评分: 体力 + 5
查看全部评分
|