다음과 같은 문제가 있습니다. 데이터가 포함 된 큰 파일을 검색하는 코드를 개발했으며 프로세스가 너무 느려지고 일부 컴퓨터에서 사용 가능한 모든 컴퓨터 리소스를 사용합니다. MATLAB에서 외부 파일을 더 효율적으로 읽음
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 작업)을 찾아이 될 것이라고에 대한 엑셀 시트에 어떤 도움을 재현하는 것입니다 고맙습니다.
편집 ---- 모든 의견 주셔서 대단히 감사합니다, 나는 그것을 저장하는 변수들에 의해 수행하는 데 사용 unnecesary 시간을 많이 절약 할 다음 코드를 내놓았다 :
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
파일의 크기는 대략 얼마이고 얼마나 많은 파일을 말하고 있습니까? – sebastian
파일은 약 25MB의 각 파일과 약 8 개의 파일을 처리 할 수 있습니다. – user2751649