您的位置:首页 > 编程语言 > MATLAB

matlab——数据类型在unix和PC下的不同

2013-11-20 13:40 225 查看
先贴一段代码

a=strvcat('call :get "%cd%"','pause>nul','exit',':get','echo %~nx1>name.txt')
a=a'
fp=fopen('A.bat','a+')
for i=1:5
fprintf(fp,'%s\n',a(:,i))
end
status=fclose(fp)
乍看下去好像没什么错误(也就是开水让调试了n遍的原因,汗......),不就是把字符串一行行地写进bat文件里嘛~运行一看,结果回车符原样输出了! 直接出来\n!郁闷至极,果断抱度娘大腿(度娘:老娘的大腿岂是你想抱就能抱的?!  啾! 求之不得,开水被度娘踹飞了........)第二天醒来,做完微机实验,兴奋地回来取悦度娘,终于搜出了结果TAT原来在fopen中,有一个不引人注意的细节:文件打开的默认方式是:二进制。
附一段help里fopen的一段文字
Files can be opened in binary mode (the default) or in text mode. In binary mode, no characters are singled out for special treatment. In text mode on the PC, the carriage return character preceding a newline character is deleted on input and added before the newline character on output. To open in text mode, add "t" to the end of the mode string, for example 'rt' and 'wt+'. (On UNIX, text and binary mode are the same, so this has no effect. But on PC systems this is critical.)
晕了吧。。。。开水虽然过了六级了,但只是低空飘过。还是勉强地解释下:
文件可以以二进制(默认)或者是文本形式打开。在二进制形式下,所有字符都是原样显示(就是没有转义字符和其他特殊字符的功能)........要用文本形式打开,需在打开方式参数(a、r、w等)后面加 ‘ t ’,在unxi中二进制和文本模式都是相同的,但是在PC系统中却是有很大差异的
原来是这么回事.......吐血不已。。。。。这就是不仔细看help的后果 —— 。——|||||||||||   另外,开水在度娘的指引下, 又找到了一条同样可以实现的方法:\r\n
问:但为什么不是\n呢??
Windows 采用 \r\n 是有原因的,Windows 采用了传统的英文打字机的模式。

想想看英文打字机是如何换行的呢?英文打字机是选择将小车退回至起点,
这个过程称为回车(carriage return, CR),随后把小车调至下一行的位
置,这个过程称为换行(line feed, LF),这样就完成了英文打字机中换
行过程。

回车(CR)在计算机中使用 ASCII 为 13 的字符来表示,换行(LF)使用
ASCII 为 10 的字符来表示。这也就是 Windows 的换行采用 \r\n 来表示
的原因。

当我们从键盘输入回车键时,Windows系统会把回车键
当做\r\n 来处理,Unix系统只会当做\n 来处理,不管
在什么系统中,都可以用\n来作为一行输入结束的标
记,只是在编程时我们需要注意,在Windows系统中我
们会读到\r 这个字符,我们必须把\r和正常输入的字
符区别开来

http://bbs.csdn.net/topics/270056587

原来如此!没想到这里还有这么个学问,学习了学习了! 学无止境,有意思有意思~
最后附上fopen参数的一些说明


FID= FOPEN(filename,permission)

用指定的方式打开文件

FID=+N(N是正整数):表示文件打开成功,文件代号是N.

FID=-1 : 表示文件打开不成功。

FID在此次文件关闭前总是有效的。

如果以读方式打开,matlab首先搜索工作目录,其次搜索matlab的其他目录,“permission”是打开方式参数。

打开方式参数由以下字符串确定:

r 读出

w 写入(文件若不存在,自动创建)

a 后续写入(文件若不存在,自动创建)

r+ 读出和写入(文件应已存在)

w+ 重新刷新写入,(文件若不存在,自动创建)

a+ 后续写入(文件若不存在,自动创建))

w 重新写入,但不自动刷新

a 后续写入,但不自动刷新

文件的存储格式:文件打开的默认方式是:二进制。以文本方式打开,可以在方式参

数“permission”中加入“t”文件将,如“rt”,“wt+”

http://hi.baidu.com/sueyehanxiang/item/87f565872c0220c5ef083d41

最后说明下a与w的区别:w+需要用户有删除权限,而a+不需要。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: