MATLAB Answers

Select Specific NC Files in Folder Using Date Included in Filename

19 views (last 30 days)
Michelle De Luna
Michelle De Luna on 22 Jan 2021
Answered: per isakson on 22 Jan 2021
Good evening! I hope this message finds everyone healthy and well.
I'm currently working with a series of .nc files which represent over five years of data. These files are all contained in the same folder and have a similar format (e.g MERRA2_100.inst6_3d_ana_Np.19800604.SUB.nc). I also have a matrix with three columns, where the first column indicates a month, the second column a day, and the third column a year (e.g. 06, 04, 1980).
My goal is to select all of the .nc files within my folder that match the dates included in my matrix. So, if the first row in my matrix indicates June 4th, 1980 (06, 04, 1980), I would like my code to select the appropriate .nc file from my folder (MERRA2_100.inst6_3d_ana_Np.19800604.SUB.nc). I would then like to read and average the variables in my selected files, but I think I know how I would like to go about with that. Any suggestions on this matter would be greatly appreciated. Thanks in advance!
Here's what I have so far:
matrix = [month day years]
myFolder = 'C:\Users\michelle\files'
filePattern = fullfile(myFolder, '*.nc')
theFiles = dir(filePattern)
for k = 1:length(theFiles)
baseFileName = theFiles(k).name
fullFileName = fullfile(theFiles(k).folder, baseFileName)
fprintf(1, 'Now reading %s\n', fullFileName)
end

Answers (1)

per isakson
per isakson on 22 Jan 2021
Something like this should do it
matrix = [ 6, 4, 1980
6, 4, 1981 ];
dates = string( datestr( [matrix(:,[3,1,2]), zeros(size(matrix))], 'yyyymmdd' ) );
theFiles = dir( fullfile( 'C:\Users\michelle\files', 'MERRA*.nc' ) );
for jj = 1 : numel( theFiles )
filespec = string( fullfile( theFiles(jj).folder, theFiles(jj).name ) );
if any( contains( filespec, dates(jj) ) )
fprintf( 'Now reading %s\n', filespec )
end
end
Not tested!

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!