我有一个索引文件(名为runnumber_odour.txt),如下所示:
run00001.txt ptol
run00002.txt cdeg
run00003.txt adef
run00004.txt adfg
我需要一些方法将其加载到matlab中的矩阵中,以便我可以搜索第二列以查找其中一个字符串,加载相应的文件并使用它进行一些数据分析。 (即如果我搜索“ptol”,它应该加载run00001.txt并分析该文件中的数据)。
我试过这个:
clear; clc ;
% load index file - runnumber_odour.txt
runnumber_odour = fopen('Runnumber_odour.txt','r');
count = 1;
lines2skip = 0;
while ~feof(runnumber_odour)
runnumber_odourmat = zeros(817,2);
if count <= lines2skip
count = count+1;
[~] = fgets(runnumber_odour); % throw away unwanted line
continue;
else
line = strcat(fgets(runnumber_odour));
runnumber_odourmat = [runnumber_odourmat ;cell2mat(textscan(line, '%f')).'];
count = count +1;
end
end
runnumber_odourmat
但是这只产生一个817乘2的零矩阵(即不写入矩阵),但没有行runnumber_odourmat = 0(817,2);我收到错误“未定义的函数或变量'runnumber_odourmat'。
我也用strtrim而不是strcat尝试了这个,但是同样的问题也行不通。
那么,如何将该文件加载到matlab中的矩阵中?
答案 0 :(得分:2)
您可以使用Map对象轻松完成所有这些操作,因此您无需进行任何搜索或类似操作。您的第二列将成为第一列的关键。代码如下
clc; close all; clear all;
fid = fopen('fileList.txt','r'); %# open file for reading
count = 1;
content = {};
lines2skip = 0;
fileMap = containers.Map();
while ~feof(fid)
if count <= lines2skip
count = count+1;
[~] = fgets(fid); % throw away unwanted line
else
line = strtrim(fgets(fid));
parts = regexp(line,' ','split');
if numel(parts) >= 2
fileMap(parts{2}) = parts{1};
end
count = count +1;
end
end
fclose(fid);
fileName = fileMap('ptol')
% do what you need to do with this filename
这将提供对任何元素的快速访问
然后,您可以使用我提供的答案执行上一个问题中描述的内容。