Read netCDFs in loop and export to table with different sizes
    7 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Siegmund Nuyts
 el 23 de Sept. de 2022
  
    
    
    
    
    Comentada: Siegmund Nuyts
 el 27 de Sept. de 2022
            I am reading several netCDF files with a datetime and corresponding data.
All datafiles have a different lenght, so I thought to find the common range of datetime for all files and save the corresponding data in 1 table so that I have a table like:
[datetime sensor1 sensor2 sensor3 sensor...]
I already found a way to read the files and find the common date but struggle to get evertyhing into 1 table.
Does anyone has a suggestion?
addpath(genpath('./'))
path = 'F:\Waterlevel/';
netCDF = dir([path,strcat('**/Sensor_*')]);
for i = 1:length(netCDF)
    baseFilename = netCDF(i).name;
    fullFileName = fullfile(path, baseFilename);
    fprintf(1, 'Now reading %s\n', fullFileName);
    nt = ncread(fullFileName, 'datetime');
    Times = datetime(nt, 'convertFrom', 'posixtime', 'Format', 'yyyy-MM-dd HH:mm:ss');
    nlevel = ncread(fullFileName, 'level'); 
    [commondates, whereina, whereinb] = intersect(Times,Times(1:length(i)));
    firstcommon = commondates(1);
end
0 comentarios
Respuesta aceptada
  Eric Sofen
    
 el 23 de Sept. de 2022
        
      Editada: Eric Sofen
    
 el 26 de Sept. de 2022
  
      I assume nlevel is the sensor data? If so, build up a cell array of timetables in the loop, then synchronize them.
Edit: fixed concatenation code.
addpath(genpath('./'))
path = 'F:\Waterlevel/';
netCDF = dir([path,'**/Sensor_*']);
alldata = {};
for i = 1:length(netCDF)
    baseFilename = netCDF(i).name;
    fullFileName = fullfile(path, baseFilename);
    fprintf(1, 'Now reading %s\n', fullFileName);
    nt = ncread(fullFileName, 'datetime');
    Times = datetime(nt, 'convertFrom', 'posixtime', 'Format', 'yyyy-MM-dd HH:mm:ss');
    nlevel = ncread(fullFileName, 'level'); 
    alldata = [alldata, {timetable(Times,nlevel)}];
end
finaldata = synchronize(alldata{:},'intersection');
4 comentarios
  Eric Sofen
    
 el 26 de Sept. de 2022
				Whoops! alldata should be built up as a cell array of tables:
alldata = [alldata, {timetable(Times, nlevel)}];
Más respuestas (0)
Ver también
Categorías
				Más información sobre Data Type Conversion en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!