做数据采集的兄弟,肯定被 MATLAB 文件操作 坑过。前两天写个脚本把 2GB 的传感器数据存下来,用 xlswrite直接卡死,改用 fprintf又乱码。其实 MATLAB 玩文件,底层全是 C 语言那一套。2026年了,别再用那些慢吞吞的高级函数了,学会 fopen、fread和 fwrite,你才能驾驭 TB 级的数据。今天聊聊怎么像黑客一样操作文件。
处理图像、雷达信号或者通信数据包,必须用二进制模式('b')。文本模式会偷偷把换行符转码,数据直接废掉。
fid = fopen('sensor.bin', 'wb'); % 二进制写入
if fid > 0
% 注意精度!double占8字节,single占4字节
count = fwrite(fid, data_array, 'double');
fprintf('成功写入 %d 个数据点\n', count);
fclose(fid);
end
读的时候更要小心。如果文件是 double存的,你用 char读,数据全乱。一定要知道文件里存的是什么类型。比如读一个 1000x3 的点云数据:fid = fopen('pointcloud.bin', 'rb');
points = fread(fid, [3, 1000], 'double'); % 按列读取
fclose(fid);
这里的 [3, 1000]是关键,MATLAB 是按列填充矩阵的,别把行列搞反了。读 TXT 日志文件,fscanf比 load强在哪?因为它能控制格式。比如一行数据是 Time: 1.23, Temp: 25.6,load直接懵逼,但 fscanf能精准提取:
fid = fopen('log.txt', 'r');
% 格式字符串必须严格匹配文件内容
data = fscanf(fid, 'Time: %f, Temp: %f\n', [2, inf]);
fclose(fid);
最大的坑是文件路径。Windows 下的路径要用双反斜杠 \\或者正斜杠 /。比如 'D:\\data\\test.txt'或者 'D:/data/test.txt',单反斜杠 \t会被当成转义字符,文件永远打不开。fseek和 ftell是神器。想跳过文件头?用 fseek。想接着上次的位置写?用 ftell。
fid = fopen('large_file.bin', 'wb');
fseek(fid, 1024 * 1024 * 1024, 'bof'); % 直接从文件头跳1GB
fwrite(fid, 1, 'int8'); % 写一个字节
fclose(fid);
这段代码瞬间创建一个 1GB 的文件,不用真的写 1GB 的数据,非常适合预留磁盘空间。但要注意,指针不能移到文件开头(bof)之前,不然会报错。
| 操作场景 | 推荐函数 | 原因 |
|---|---|---|
| 读取 CSV/Excel | readmatrix, readtable | 高层封装,方便,但慢 |
| 读取传感器原始数据 | fread | 速度快,无格式转换开销 |
| 保存配置参数 | jsonencode+ fprintf | 可读性好,便于调试 |
| 保存矩阵计算结果 | save('data.mat', 'var') | 最安全,保留所有变量信息 MATLAB 文件操作的核心是精度控制和指针管理。2026年,随着 NVMe 硬盘普及,文件 I/O 不再是瓶颈,但错误的读写方式依然能拖慢你的仿真。别让这些低级错误,耽误了你处理大数据的时间。 |
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。