与正常模式下正确设置的回车符相比,为什么 fprintf 在文本模式下的行为不同?

2023-12-31

下面的问题与其说是一个问题,不如说是一个好奇心。

我绊倒了这个问题 https://stackoverflow.com/q/6536599/2605073,提供了两个似乎相同的不同答案。但他们不是,这让我思考。

想象一个system调用会回显两行:

[~,message] = system( 'echo hello && echo world' );

returns:

hello
world

如果想将这些行写入.txt- 文件并在记事本中打开它,常见的方法是:

fid = fopen([pwd '\helloworld.txt'],'w');
fprintf(fid, '%s\n', message);
fclose(fid);
winopen('helloworld.txt')

返回

hello world

由于记事本显然无法识别换行符\n正确地,解决方案是使用'wt'代替'w'强制执行文本模式,这应该很慢。返回:

hello
world

The fopen 权限的文档 http://www.mathworks.de/de/help/matlab/ref/fopen.html says:

要以文本模式打开文件,请将字母“t”附加到权限上 参数,例如“rt”或“wt+”。

在 Windows® 系统上,在文本模式下:
- 遇到回车符后跟换行符 ('\r\n') 的读取操作会从输入中删除回车符。

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

所以根据我的理解,它基本上是:

fprintf(fid, '%s\r\n', message)

但输出再次是:

hello world

还有什么作用'wt'?一个人怎样才能获得与以下行为相同的行为:'w'? 如果这个问题毫无意义且微不足道,我很抱歉,但经过几个令人沮丧的小时后,我只是好奇我错过了什么。


据我了解确实如此

fprintf(fid, '%s', strrep(message, sprintf('\n'), sprintf('\r\n'))

如果你这样做

fprintf(fid, '%s\r\n', message)

您只需在消息的最后添加一个回车符和一个换行符,即“world\n”之后。“hello”和“world”之间的换行符仍然没有回车符。

所以在你的 fprintf 中你的消息是"hello\nworld\n\r\n",它应该在哪里"hello\r\nworld\r\n"

您可以通过以字节为单位读取输出文件来检查这一点,知道\n将是一个10 as uint8 and \r a 13:

>> fid = fopen('test.txt','wt');
>> fprintf(fid, 'hello\nworld\n');
>> fclose(fid);
>> fid = fopen('test.txt','r');
>> bytes = fread(fid, Inf, 'uint8')'

bytes =

   104   101   108   108   111    13    10   119   111   114   108   100    13    10
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与正常模式下正确设置的回车符相比,为什么 fprintf 在文本模式下的行为不同? 的相关文章

  • 在 MATLAB 中检索 spfun、cellfun、arrayfun 等中的元素索引

    有什么办法可以找回index调用函数的元素的cellfun arrayfun or spfun行为 即检索函数范围内元素的索引 为了简单起见 假设我有以下玩具示例 S spdiags 1 4 0 4 4 f spfun x 2 x S 它构
  • printf 参数不足

    我的问题是关于缺少参数的 printf 之后的行为 printf s blah blah d int integer was given as argument and not int written 我已经知道 如果格式参数不足 则行为是
  • 检查Matlab中脚本需要使用的函数

    我有一个别人写的代码包 我正在运行一个脚本 它调用一些函数 这些函数又调用更多函数 等等 我想获取不是 MATLAB 内置函数但属于包的一部分的函数列表 我尝试使用matlab codetools requiredFilesAndProdu
  • MATLAB 滚动图

    我有一个脑电图数据库 我想绘制它 数据库是一个19 1000 134的矩阵 其中 19 是通道数 在第一种方法中 我只使用一个渠道 1000 个样本大小 采样率为 500 Hz 时为 1000 个点 即 2 秒数据 134 epochs的数
  • MATLAB 中的多个捕获组

    我有一个包含数字或字母的字符串a 可能紧随其后的是r or l 在 MATLAB 中 以下正则表达式返回为 gt gt regexp 10r 0 9 a l r match ans 10r 我希望10 and r分开 因为我有两个捕获组 有
  • 不等间隔时间序列的移动平均线

    我有一个证券交易所股票价格的数据集 时间 价格 但数据点之间的间隔并不相等 从 1 到 2 分钟不等 在这种情况下计算移动平均值的最佳实践是什么 如何在Matlab中实现呢 我倾向于认为 点的权重应该取决于自上一个点以来的最后时间间隔 Ma
  • 为什么 Windows 使用 CR LF?

    我了解两者之间的区别 因此没有必要深入讨论 但我只是想知道 Windows 同时使用 CR 和 LF 来指示换行符背后的原因是什么 看起来 Linux 方法 仅使用 LF 更有意义 节省空间 并且更容易解析 Historically whe
  • 如何找到在matlab中重复的矩阵的每一行的索引?

    我想找到矩阵中所有有重复项的行的索引 例如 A 1 2 3 4 1 2 3 4 2 3 4 5 1 2 3 4 6 5 4 3 要返回的向量将是 1 2 4 很多类似的问题建议使用unique函数 我已经尝试过 但我能得到的最接近我想要的功
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • 在 C 中读取字符时打印

    我正在尝试编写一个简单的小代码片段来响应箭头键按下 我知道 up 由 A 表示 并且我有以下代码来检查该序列 while 1 input char fgetc stdin if input char EOF input char n bre
  • 在 Matlab 中高效获取像素坐标

    我想在 Matlab 中创建一个函数 给定一个图像 该函数将允许人们通过单击图像中的像素来选择该像素并返回该像素的坐标 理想情况下 人们能够连续单击图像中的多个像素 并且该函数会将所有相应的坐标存储在一个矩阵中 有没有办法在Matlab中做
  • matlab中的排列函数是如何工作的

    这是一个有点愚蠢的问题 但我似乎无法弄清楚排列在 matlab 中是如何工作的 以文档为例 A 1 2 3 4 permute A 2 1 ans 1 3 2 4 到底是怎么回事 这如何告诉 matlab 3 和 2 需要交换 哇 这是我迄
  • 如何找到平面和 3d 矩阵之间的交平面

    如果我有一堆图像并且尺寸如下 size M 256 256 124 我有 3 个点 它们的坐标是 coor a 100 100 124 coor b 256 156 0 coor c 156 256 0 如何创建 M 与这 3 个点定义的平
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • 当字符串的长度大于n时,如何打印字符串的前n个字节?

    所以我有一个具有一定字节数 或长度 的字符串 我说字节是因为字符串末尾没有 NULL 终止符 不过 我知道绳子有多长 通常 众所周知 当您printf s str 它将继续打印每个字节 直到到达 NULL 字符 我知道没有 C 字符串不是
  • 用 while 循环打开文件 - C [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 各位程序员大家好 我的问题不大 我不知道如何打开具有不同数字 在文件名中 的文件 从 1 到存在的任意数量的文件 例如 我有两个 或最
  • 如何在 MATLAB 中绘制 3D 曲面图?

    我有一个像这样的数据集 0 1 0 2 0 3 0 4 1 10 11 12 13 2 11 12 13 14 3 12 13 14 15 4 13 14 15 16 我想在 matlab 中绘制 3D 曲面图 使列标题位于 y 轴 行标题

随机推荐