如何用Matlab从批量同格式TXT文件提取Andy的数值至cell array
批量提取TXT文件中Andy的数值并存入Cell Array
嘿,这事儿完全能搞定!既然你要存成cell array,那咱们用MATLAB来处理最顺手——毕竟这是MATLAB的原生数据类型之一。针对你近100个格式统一的TXT文件,下面是一套高效的批量处理方案:
核心思路
你的TXT文件格式非常固定,每个用户的条目都是| 姓名 | 值1 | 值2 | 值3 |的结构,所以我们可以用正则表达式精准定位Andy的那一行,提取对应的三个数值,再循环遍历所有文件完成批量操作。
具体实现步骤&代码
1. 获取所有目标TXT文件的路径
先用dir函数抓取指定目录下的所有TXT文件,自动生成待处理文件的列表:
% 替换成你的TXT文件所在目录,当前目录用'*.txt'即可 fileList = dir('*.txt'); % 初始化存储结果的cell array,每行对应一个文件的三个数值 andyResults = cell(length(fileList), 3);
2. 循环处理每个文件
遍历每个文件,读取内容后用正则表达式匹配Andy的条目,提取数值并存入cell array:
for i = 1:length(fileList) % 打开文件,检查是否成功 fid = fopen(fileList(i).name, 'r'); if fid == -1 warning(['跳过文件:无法打开 ', fileList(i).name]); andyResults(i, :) = {NaN, NaN, NaN}; % 未找到文件时填充NaN continue; end % 读取文件全部内容 content = fread(fid, '*char')'; fclose(fid); % 正则表达式匹配Andy的行,捕获三个数值 % 这个pattern适配你的格式:| Andy | 数值1 | 数值2 | 数值3 | pattern = '\| Andy \| ([\d\.-]+) \| ([\d\.-]+) \| ([\d\.-]+) \|'; matches = regexp(content, pattern, 'tokens'); if ~isempty(matches) % 将字符串转成数值,存入cell array的对应位置 andyResults(i, 1) = {str2double(matches{1}{1})}; andyResults(i, 2) = {str2double(matches{1}{2})}; andyResults(i, 3) = {str2double(matches{1}{3})}; else warning(['文件 ', fileList(i).name, ' 中未找到Andy的条目']); andyResults(i, :) = {NaN, NaN, NaN}; end end % 查看最终结果 disp('Andy的所有提取结果:'); disp(andyResults);
额外说明
- 如果你的TXT文件不在MATLAB当前工作目录,记得修改
dir的路径,比如dir('D:/data_files/*.txt')。 - 正则表达式是这套方案的核心,只要你的文件格式保持不变(Andy的条目始终是
| Andy | 值1 | 值2 | 值3 |),这个匹配规则就不会出错。 - 要是你更习惯用Python,也可以用
glob获取文件列表、re模块做正则匹配,然后用嵌套列表来模拟cell array的效果——不过考虑到你明确提到cell array,MATLAB的实现会更直接。
内容的提问来源于stack exchange,提问作者박하영
相关产品推荐
相关产品推荐

