loop to read netcdf files

1 回表示 (過去 30 日間)
Maite M.
Maite M. 2016 年 8 月 3 日
編集済み: Maite M. 2016 年 8 月 4 日
hi, I have hundreds of netcdf files to work and I want to generate a loop to read all of them and save the result in other folder. The result it is a cut (a smaller region of interest) and then I will calculate the mean value. I have done the code for a single file and it works:
ncid1=netcdf.open('ESACCI-SOILMOISTURE-L3S-SSMV-COMBINED-20100101000000-fv02.2.nc', 'NC_NOWRITE');
varname = netcdf.inqVar(ncid1,4);
varid = netcdf.inqVarID(ncid1,varname);
data = netcdf.getVar(ncid1,varid);
lon1=netcdf.getVar(ncid1,0,0,1440);
lat1=netcdf.getVar(ncid1,1,0,720);
[longrid,latgrid]=meshgrid(lon1,lat1);
data2=data((longrid>-1)&(longrid<0)&(latgrid>39)&(latgrid<40));
(the mean value I will calculate it when I have all the files cut). I have found some information on previous answers but I am still not able to solve it. It works until sentence "%Now do whatever you want with this file name" because it is copied from internet and I don't know how to continue:
% Specify the folder where the files are.
myFolder = 'G:\DATA_validation\ESA\data\daily_files\COMBINED\v02.2\2010\files';
% Check to make sure that folder actually exists. Warn user if it doesn't.
if ~isdir(myFolder)
errorMessage = sprintf('Error: The following folder does not exist:\n%s', myFolder);
uiwait(warndlg(errorMessage));
return;
end
% Get a list of all files in the folder with the desired file name pattern.
filePattern = fullfile(myFolder, '*.nc');
theFiles = dir(filePattern);
for k = 1 : length(theFiles)
baseFileName = theFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
% Now do whatever you want with this file name
ncid=netcdf.open(theFiles(k), 'NC_NOWRITE');
varname = netcdf.inqVar(ncid,4);
varid = netcdf.inqVarID(ncid,varname);
data(k) = netcdf.getVar(ncid,varid);
end
Thanks in advanced, I'm not good coding... if you don't understand me just ask!

採用された回答

Maite M.
Maite M. 2016 年 8 月 4 日
編集済み: Maite M. 2016 年 8 月 4 日
just in case someone need it, I could solve it and I share the code, I haven't finished yet, but my doubt is solved as:
% Specify the folder where the files are.
myFolder = 'G:\SWICCA\DATA_validation\ESA\data\daily_files\COMBINED\v02.2\2010\files';
% Check to make sure that folder actually exists. Warn user if it doesn't.
if ~isdir(myFolder)
errorMessage = sprintf('Error: The following folder does not exist:\n%s', myFolder);
uiwait(warndlg(errorMessage));
return;
end
filePattern = fullfile(myFolder, '*.nc');
theFiles = dir(filePattern);
% Loop for each nc-file
for i = 1:length(theFiles)
baseFileName = theFiles(i).name;
fullFileName = fullfile(myFolder, baseFileName);
% fprintf(1, 'Now reading %s\n', fullFileName);
% ncdisp(ncfiles(i).name) ;
ncid=netcdf.open(fullFileName, 'NC_NOWRITE');
varname= netcdf.inqVar(ncid,4);
varid = netcdf.inqVarID(ncid,varname);
% data = netcdf.getVar(ncid,varid);
netcdf.close(ncid);
end

その他の回答 (1 件)

KSSV
KSSV 2016 年 8 月 3 日
% Read the names of nc-files in the folder
ncfiles = dir('*.nc') ;
Nfiles = length(ncfiles) ; % Total number of nc files
% Loop for each nc-file
for i = 1:Nfiles
% display the nc file
ncdisp(ncfiles(i).name) ; % call the nc file by ncfiles(i).name
% do what you want %
end
In the above I am displaying nc-files in the loop; you can do what ever you want instead. hope the above hint helps you.
  2 件のコメント
Maite M.
Maite M. 2016 年 8 月 3 日
thank you a lot for answering, it's much simpler now but still I can't read the files...
for i = 1:Nfiles
ncid=netcdf.open('ncfiles(i)', 'NC_NOWRITE');
varname = netcdf.inqVar(ncid,4);
varid = netcdf.inqVarID(ncid,varname);
data(i) = netcdf.getVar(ncid,varid);
end
How should I write the inside part of the loop? I want to read every file and save each one as a matrix "data" in other folder. This matrix should contain only "varname" data.
KSSV
KSSV 2016 年 8 月 3 日
You make your code to read single variable into a function and call it inside the loop.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeStartup and Shutdown についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by