我在网上找到了一些信息,但不足以帮助我解决此问题。我正在遍历多个文件并从文件中提取数据。然后将其存储在名为extract
的数组中。问题是我在for
循环中这样做,并正在寻找某个字符串。如果该字符串不存在,它仍会遍历循环并增加我的计数器。因此,如果我遍历两个文件,而我要查找的字符串不在那儿,但是在第三个文件在那儿,那么我写的第一行是第3行而不是第1行。我还附加了一个图像前几个数据元素。我希望能够删除具有[]
的行,然后将其移至下方。这是代码,感谢您的宝贵时间。如果还有什么我可以提供的,请告诉我!
function this = extractData(this, xAxis, yAxis)
s = dir('*.txt'); % Gather all text files
for i=1:length(s) % Loop through and gather data until last element of strcuct
j = 1;
fid = s(i).name; % Open file in read-only mode
this = this.readDataFromFile(fid);
if ~contains(this.metaData(:,1), xAxis)
continue;
end
x = this.metaData(find(contains(this.metaData(:,1), xAxis)),3);
this.extract{i,j} = x;
j = j+1;
y = this.metaData(find(contains(this.metaData, yAxis)),3); %#ok<*FNDSB>
this.extract(i,j) = y;
end %for
xAxis = strrep(xAxis, ' ', '_'); % For file formatting
yAxis = strrep(yAxis, ' ', '_');
this.colLabels = {xAxis, yAxis};
% Write it all to a file
fileName = 'myTestFile.txt'
filepath = cd;
file = fullfile(filepath, fileName);
fid = fopen(file, 'w');
if fid == -1
error ('Cannot open file for writing: %s', file);
end
% File must denote where meta-data and data begin
fprintf(fid, '%-72s', '=============================meta data=============================');
fprintf(fid, '\n');
for row=1:size(this.extract,1)
for col=1:size(this.extract,2)
fprintf(fid, '%s', this.extract{row,col});
end
fprintf(fid, '\n');
end %for
fclose(fid);
end %extractData
答案 0 :(得分:1)
您是否正在寻找这样的循环逻辑?
k = 1;
for i=1:length(s)
fid = s(i).name;
%...
if %...
continue;
end
this.extract{k,j} = %...
k = k + 1;
end
在这里,我们只是将指示要读取哪个文件的索引i
与指示要写入输出矩阵中哪一行的索引k
分离。