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+不需要。
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+不需要。
相关文章推荐
- MATLAB 不同颜色空间的图像存储的数据类型
- 不同数据类型if语句的与“零值”比较
- 有时我们需要调用一个函数时,返回多个不同类型的数据
- matlab中如何实现对不同类型对象(类型也可相同)的索引?(很重要的用法)
- printf函数使用—针对不同数据类型的输出结果详解
- 前端-javascript-不同数据类型间的运算,数据类型转换规则
- 不同类型数据以及有符号与无符号的运算规则
- 32位单片机不同数据类型运算速度对比测试
- android jni jobjectArray存储输出不同类型的数据
- C/C++中不同数据类型所占用的内存大小
- 不同数据类型的清洗
- .net 访问不同数据库之配置参数和参数数据类型
- Gson+retrofit解析同一位置不同类型的json数据
- Unix基本系统数据类型
- Linux/Unix中的基本系统数据类型
- Sql server不同数据类型间拼接(+)
- matlab各种数据类型的文件的读取与写入方法
- blob类型的数据,可以保存图片,直接把图片转化为代码,和text不同,editkindor常用到
- VC++与Matlab混合编程之引擎操作详解(4)数据类型mxArray的操作
- 如何使用QString把不同类型的数据如何转换成字符串形式输出