MATLAB中的fopen('text.txt', 'wt')是什么意思?

8

我尝试了 help fopen

但是没有解释 t 代表什么。


在线文档(http://www.mathworks.com/access/helpdesk/help/techdoc/ref/fopen.html)有更详细的解释-请向下滚动到“权限”部分。 - mtrw
所以文本模式只在Windows中有影响? - user198729
4个回答

5

根据文档(R2009a,Windows):

在UNIX系统中,二进制和文本模式是相同的。

在Windows系统中,二进制和文本模式是不同的。如果您不确定哪种模式最适合您的文件,请使用二进制模式。默认情况下,fopen以二进制读取方式打开文件。

在二进制模式下,读取和写入操作以相同的方式处理所有字符。在文本模式下:

  • 读取操作遇到回车符后跟换行符会将回车符从输入中删除。

  • 写入操作在任何换行符之前插入一个回车符。

UNIX版本(R2009b)还补充道(在doc fopen中):

为了获得更好的性能,请不要使用文本模式。


2

与PHP和其他语言类似,MATLAB中的t确实代表“文本”模式;但是,其含义略有不同。

在MATLAB中,如果您以文本模式打开文件,则会在处理或操作行之前从输入中剥离行尾结束符,然后再将其添加到输出中;二进制模式使用b表示,不执行此类换行符剥离操作。

请参阅fopen参考资料


你能详细说明一下它是如何“从输入中删除换行符”的吗?我认为这样做会导致将头和尾连接在一起而出现错误。 - user198729
文本模式会导致在 Windows 系统上任何 \r\n 的实例在读取时被替换为简单的 \n,并且在写入操作中发生相反的情况。我提供的文档暗示了这一点;而 @mtrw 提供的文档则明确指出了这一点。 - Tim
它只在Windows中有影响 - \r字符(回车符或CR)通常仅出现在“Windows风格”的行尾中(由\r\nCRLF组成)。Unix行尾仅包含\n(换行符或LF)。文本模式适用于任何地方 - 在Unix平台上谈论它没有意义。 - Tim

2

来自matlab fopen文档

要以文本模式打开文件,请将字母“t”附加到权限,例如“rt”或“wt+”。为了获得更好的性能,请不要使用文本模式。在Windows系统中,在文本模式下,以下规则适用:

  • 读取操作遇到回车符后跟随换行符('\r\n')会从输入中删除回车符。

  • 写入操作在输出中的任何换行符之前插入回车符。

这种额外的处理对于大多数情况来说是不必要的。所有MATLAB导入函数和大多数文本编辑器(包括Microsoft Word和WordPad)都将'\r\n'和'\n'作为换行序列识别。但是,当您创建供Microsoft记事本使用的文件时,请在每行末尾添加'\r\n'。有关示例,请参见fprintf。


1

从PHP文档中窃取的[是的,这是一种不同的语言,但我们正在谈论filemode参数,所以不应该有任何区别]

Windows提供了一个文本模式翻译标志('t'),在处理文件时将\n透明地转换为\r\n。相反,您也可以使用“b”来强制二进制模式,这将不会翻译您的数据。要使用这些标志,请将“b”或“t”指定为模式参数的最后一个字符。

....

为了提高可移植性,强烈建议您重新编写使用或依赖于“t”模式的代码,以便使用正确的行尾和“b”模式。

http://php.net/manual/en/function.fopen.php


不太对 - MATLAB将文本模式视为“从输入中删除换行符”。详情请参见http://www.oit.uci.edu/dcslib/matlab/matlab-v53/help/techdoc/ref/fopen.html。 - Tim
那么它是指“text”还是“translation”? - user198729

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接