Aria2ESGFMetalink: metalinkFilter.m

File metalinkFilter.m, 1.6 KB (added by sixto, 5 years ago)
Line 
1function fid=metalinkFilter(metalink)
2%% Example:
3%% metalink='hadgem2_es.metalink';
4%% fid=metalinkFilter(metalink);
5%% dir([metalink '_last_version.metalink'])
6
7[workPath,a1,a2]=fileparts(metalink);
8xmlLines=textread(metalink,'%s','delimiter','\r\n');
9endFiles=find(ismember(deblank(xmlLines),{'</file>'}));Nfiles=length(endFiles);
10startFiles=[];fileProperties=cell(Nfiles,3);contador=1;
11for i=1:length(xmlLines)
12        sd=strfind(xmlLines{i},'<file name="');
13        if ~isempty(sd)
14                startFiles=[startFiles;i];
15                fileName=[workPath '/' xmlLines{i}(sd+12:end-2)];
16                [pathName,fileName,extFile]=fileparts(fileName);
17                [aux1,aux2,vFile]=fileparts(pathName);vFile=vFile(2:end);
18                fileProperties{contador,1}=fileName;fileProperties{contador,2}=vFile;fileProperties{contador,3}=i;
19                contador=contador+1;
20        end
21end
22[fileNames,I1,I2]=unique(fileProperties(:,1));
23lastFile=cell(length(I1),3);
24for i=1:length(I1)
25        indFiles=find(I2==i);
26        versiones=strvcat(fileProperties(indFiles,2));versiones=str2num(versiones(:,2:end));
27%%      versiones=strvcat(fileProperties(indFiles,2));versiones=datenum([str2num(versiones(:,2:5)) str2num(versiones(:,6:7)) str2num(versiones(:,8:9)) repmat([0 0 0],length(indFiles),1)]);
28        [a1,a2]=max(versiones);lastFile(i,:)=fileProperties(indFiles(a2),:);
29end
30fid=fopen([metalink '_last_version.metalink'],'w');
31for i=1:min(startFiles)-1
32        fprintf(fid,'%s \r\n',xmlLines{i});
33end
34Nfiles=length(I1);
35for i=1:Nfiles
36        indFile=find(startFiles==lastFile{i,3});
37        for j=startFiles(indFile):endFiles(indFile)
38                fprintf(fid,'%s \r\n',xmlLines{j});
39        end
40end
41for i=max(endFiles)+1:length(xmlLines)
42        fprintf(fid,'%s \r\n',xmlLines{i});
43end
44fclose(fid);