使用matlab中的feof函数从文件中读取字符串矩阵

时间:2013-07-22 12:03:41

标签: matlab

我有一个索引文件(名为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中的矩阵中?

1 个答案:

答案 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

这将提供对任何元素的快速访问

然后,您可以使用我提供的答案执行上一个问题中描述的内容。