我有以下问题,我开发了一个代码来搜索包含数据的大文件,这个过程变得太慢,甚至在某些计算机中它消耗了所有可用的计算机资源。
nodo=str2num(get(handles.nodo,'string'));
PATHNAME = uigetdir('', 'Selecciona el directorio donde están los bfins');
files = dir(fullfile(PATHNAME,'*.bfin') );
curr_folder=pwd;
cd(PATHNAME);
archivo={files.name}';
for i=1:numel(archivo)
[fid{i}, errmsg]=fopen(files(i).name)
disp(errmsg);
Datos{i}=textscan(fid{i}, '%s %f %s %f %s %f ','Headerlines',2);
AllNodos{i}=Datos{1,i}{1,2};
AllTemp{i}=Datos{1,i}{1,4};
end
cd(curr_folder)
for i=1:size(AllNodos,2)
sets{i}=cat(2, AllNodos{1,i}, AllTemp{1,i});
end
for i=1:size(AllNodos,2)
vectn{i}=AllNodos{1,i};
r{i}=find(vectn{i}==nodo);
Temps{i}=AllTemp{1,i}(r{i});
end
%Write Excel File
[FileName, PathName] = uiputfile('*.xlsx', 'Escribe un archivo excel con las temperaturas...')
savingas=fullfile(PathName,FileName);
a=archivo';
B=cat(1,a,Temps);
xlswrite(savingas,[B])
e = actxserver ('Excel.Application'); %# open Activex server
ewb = e.Workbooks.Open(savingas); %# open file (enter full path!)
ewb.Worksheets.Item(1).Name = num2str(nodo); %# rename 1st sheet
ewb.Save %# save to the same file
ewb.Close(false)
e.Quit
代码的真正作用是在文件中找到字符串的位置,然后找到另一个变量(只是一个 cntrl+f 操作)并在 Excel 表中重现它们,任何有关此的帮助将不胜感激。
编辑----非常感谢您的所有评论,我想出了以下代码,它通过存储变量节省了大量不必要的时间:
for i=1:num_archivo
[fid(i), errmsg]=fopen(files(i).name)
disp(errmsg);
Datos=textscan(fid(i), '%s %f %s %f','delimiter',',','HeaderLines',hl);
AllNodos=Datos(1,2);
AllTemp=Datos(1,4);
for k=1:numel(nodo)
r{i,k}=find(AllNodos{1,1}==nodo(k));
Temps{i,k}=AllTemp{1,1}(r{i,k});
end
end