如何在MATLAB中从文本文件读取矩阵与向量?
问题:读取文本文件中的矩阵/向量并创建对应变量
我有一个文本文件,每行内容为如下格式的矩阵和向量:
A = [0 1 0 ... 0]; B = [0 1 0 ... 0]; ...
请问如何读取这些内容并创建对应的向量和矩阵?
我尝试了以下方法,但创建后的向量为空:
fo = fopen('filename.txt', 'r'); A = fscanf(fo, '%f', [m n]);
解决方案
你的fscanf写法没法匹配文本里的A = [、];这类非数值符号,所以读不到有效数据,导致变量为空。这里提供两种实用解决方案:
方法1:直接执行文本中的赋值语句(简单直接)
因为你的文本每行都是标准的Matlab赋值语句,直接逐行读取并执行即可自动创建变量:
fo = fopen('filename.txt', 'r'); if fo == -1 error('无法打开目标文件'); end while ~feof(fo) line = fgetl(fo); if ~isempty(line) % 跳过空行 eval(line); % 执行当前行的赋值代码,自动生成A、B等变量 end end fclose(fo);
注意:如果文件来源不可信,eval存在执行恶意代码的风险,谨慎使用。
方法2:提取数值并手动创建变量(更安全)
如果不想用eval,可以通过字符串处理提取变量名和数值,再创建变量:
fo = fopen('filename.txt', 'r'); if fo == -1 error('无法打开目标文件'); end while ~feof(fo) line = fgetl(fo); if isempty(line) continue; end % 提取变量名(等号左侧的内容) var_name = strtrim(strsplit(line, '=')[1]); % 提取方括号内的数值字符串 num_token = regexp(line, '\[(.*?)\]', 'tokens'); num_str = num_token{1}{1}; % 转换为数值数组 var_value = str2num(num_str); % 将变量添加到工作区 assignin('base', var_name, var_value); end fclose(fo);
这种方法避免执行未知代码,安全性更高,适合处理来源不确定的文件。
内容的提问来源于stack exchange,提问作者Andromeda
相关产品推荐
相关产品推荐

