You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB R2020b读取整个文本文件时如何保留所有换行字符

MATLAB读取全量文本并保留换行符的实现方案

核心问题原因

之前用fscanf读取丢失换行,通常是两个原因导致:

  • 调用fscanf时使用了%s格式符,该格式符默认将换行、空格等空白符作为分隔符跳过,不会读取到返回结果中
  • 文本模式打开文件时,Windows平台会自动将原文件的\r\n换行做转换,无法保留原始换行字节

方案1(效率最高,推荐):二进制模式整块读取

该方案无任何字符转换、无行拆分/循环开销,大文件下性能远高于readlines、fgetl循环,且会原封不动保留所有字符(包括所有换行符、特殊符号),和原文件内容完全一致。
示例代码:

% 以二进制只读模式打开文件,不会触发任何自动字符转换
fid = fopen('目标文件完整路径.txt', 'rb');
% 一次性读取文件全部字节
rawBytes = fread(fid, inf, 'uint8=>uint8');
fclose(fid);
% 将字节转成字符向量,若文件为非默认编码可配合native2unicode指定编码
% 例如GBK编码文件可写为:fileContent = native2unicode(rawBytes, 'GBK');
fileContent = char(rawBytes.');

方案2:文本模式下用fscanf读取

如果可以接受Windows下原文件的\r\n换行被自动转换为单个\n,可以用文本模式打开后,指定%c格式符读取全部字符,不会丢失换行:

fid = fopen('目标文件完整路径.txt', 'rt');
% 必须用%c格式,不要用%s
fileContent = fscanf(fid, '%c');
fclose(fid);

关于readlines方案的效率说明

readlines本身底层也是整块读取文件后做行拆分,性能不算差,但如果你不需要按行处理文本,额外的数组拆分、拼接步骤属于冗余开销,文件越大性能损耗越明显,不如直接用二进制读取方案效率高。fgetl循环因为是逐行IO,大文件下性能差距会达到数十倍,不推荐使用。


内容的提问来源于stack exchange,提问作者Argyll

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 07:24:24