You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将固定三行的文本文件每行加载到MATLAB的不同向量中?

更优的MATLAB文本行转单独向量方法

嘿,我来分享几个比你当前cell数组写法更简洁高效的实现方案,完美匹配你的需求:

方法1:使用readmatrix(MATLAB R2019a+ 推荐)

这是最简洁的方式,新版本MATLAB原生支持,一行完成读取,再按行提取向量:

% 读取文件为数值矩阵(不同长度的行自动补NaN,若不需要补值看方法2)
data = readmatrix('my_file.txt');
% 提取每行作为单独向量
vec1 = data(1,:);
vec2 = data(2,:);
vec3 = data(3,:);

如果你的行长度不一致且不想补NaN,可以改用readcell读取为字符串cell,再转换:

cell_data = readcell('my_file.txt', 'TextType', 'string');
vec1 = str2double(split(cell_data(1)));
vec2 = str2double(split(cell_data(2)));
vec3 = str2double(split(cell_data(3)));

方法2:使用textread(兼容旧版本MATLAB)

如果你的MATLAB版本较老,textread是兼容性更好的选择,按行读取后转成数值向量:

% 按行读取所有内容为字符串cell
line_strs = textread('my_file.txt', '%s', 'delimiter', '\n');
% 逐个转换为数值向量
vec1 = str2double(strsplit(line_strs{1}));
vec2 = str2double(strsplit(line_strs{2}));
vec3 = str2double(strsplit(line_strs{3}));

方法3:改进你的循环写法(更规范的动态cell扩充)

如果你偏好循环实现,可以优化原代码,同时别忘了关闭文件句柄(这是你之前代码的遗漏点,很重要):

fid = fopen('my_file.txt');
vecs = {};
while ~feof(fid)
    line = fgetl(fid);
    % 跳过空行(避免读取到文件末尾的空内容)
    if ~isempty(line)
        vecs{end+1} = str2num(line);
    end
end
fclose(fid); % 必须关闭文件句柄,释放资源

% 提取单独向量
vec1 = vecs{1};
vec2 = vecs{2};
vec3 = vecs{3};

小提示

  • str2num在处理复杂字符串时不如str2double稳定,推荐优先使用str2double + split/strsplit的组合;
  • 若你明确知道文件只有3行,也可以直接用fgetl三次读取,省去循环:
    fid = fopen('my_file.txt');
    vec1 = str2double(strsplit(fgetl(fid)));
    vec2 = str2double(strsplit(fgetl(fid)));
    vec3 = str2double(strsplit(fgetl(fid)));
    fclose(fid);
    

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

火山引擎 最新活动