MATLAB R2017a读写空行分隔8x8矩阵CSV文件方法
MATLAB R2017a 分块8×8矩阵CSV读写方案
R2017a环境下不要使用R2019a才引入的readmatrix/writematrix,也不要用已废弃的textread,直接用MATLAB长期稳定支持的底层文件IO函数即可,完全匹配你的格式要求,不需要额外工具箱。
读取所有8×8矩阵
实现逻辑:一次性读入文件内所有数值,自动跳过逗号、空白字符、空行,再按每64个数值(8×8)切分重构矩阵即可,不需要逐行判断空行,对不同换行格式、空行夹杂冗余空格的场景兼容性更强。
% 替换为你的实际输入文件路径 input_file = 'your_input.csv'; fid = fopen(input_file, 'r'); % 读取所有整数值,自动识别逗号、空格、换行作为分隔符 raw_data = textscan(fid, '%d', 'Delimiter', ',', 'Whitespace', ' \t\r\n'); fclose(fid); % 按8×8维度分块重构矩阵 val_list = raw_data{1}; matrix_num = length(val_list) / 64; input_mats = cell(matrix_num, 1); for k = 1:matrix_num seg = val_list((k-1)*64 + 1 : k*64); % 适配MATLAB列优先存储规则,转置后和原文件行顺序完全一致 input_mats{k} = reshape(seg, 8, 8)'; end
读取完成后input_mats是元胞数组,每个元素就是一个8×8的整数矩阵,可以直接取出来做运算。
写入运算后的浮点结果矩阵
输出格式完全对齐原文件:每行8个数值、逗号分隔、固定宽度对齐,每个矩阵末尾加空行分隔。可以根据需求调整浮点数的显示精度。
% 替换为你的实际输出文件路径 output_file = 'your_output.csv'; fid = fopen(output_file, 'w'); for k = 1:length(input_mats) % 替换为你的实际运算逻辑,此处仅做示例:将输入矩阵转为浮点后除以2 res_mat = double(input_mats{k}) / 2; % 逐行写入矩阵内容 for row = 1:8 % 每行前7个数值后加逗号 fprintf(fid, '%4.1f,', res_mat(row, 1:7)); % 每行最后一个数值后加换行 fprintf(fid, '%4.1f\n', res_mat(row, 8)); end % 单个矩阵写入完成后加空行分隔 fprintf(fid, '\n'); end fclose(fid);
格式调整说明
- 如果需要修改浮点数精度,把格式符
%4.1f里的.1改成对应小数位即可,比如保留2位小数用%4.2f,输出整数直接替换为%4d,宽度设置为4和你给出的原文件对齐效果完全一致。 - 上述代码在Windows、macOS、Linux系统下都能正常运行,不会出现换行符不兼容的问题。
内容的提问来源于stack exchange,提问作者gyuunyuu
相关产品推荐
相关产品推荐

