thank to per isakson
from this code (daily/1 file) can u make monthly graph (30file data)?? =====
function RainData = ReadManySoniData( folder_name, file_spec ) sad = dir( fullfile( folder_name, file_spec ) ); RainData = struct([]); for sa = transpose( sad ) RainData = cat( 2, RainData, ReadOneSoniData( folder_name, sa.name ) ); end [ dummy, ixs ] = sort( [ RainData(:).DayNumber ] ); RainData = RainData( ixs );endfunction rain_data = ReadOneSoniData( folder_name, file_name ) fid = fopen( fullfile( folder_name, file_name ), 'r' ); if not( fid >= 3 ) error( 'ReadOneSoniData:NoFileFound' ... , 'Cannot find file "%s"' ... , fullfile( folder_name, file_name ) ) end cac = textscan( fid, '%s', 'Whitespace','', 'Delimiter','\n' ); fclose( fid ); cac = cac{:}; tmp = cellfun( 'isempty' ... , regexp( cac, '\d{2}:\d{2}:\d{2}\s+C\s*$' ) ); isc = not( tmp ); tmp = cellfun( 'isempty' ... , regexp( cac, '\d{2}:\d{2}:\d{2}\s+\*\*\s+----' ) ); iss = not( tmp ); cac( isc | iss ) = []; str = transpose( char( cac ) ); nl = sprintf('\n'); str = cat( 1, str, repmat( nl(:), [length(nl),size(str,2)] ) ); cac = cell(1,9); [cac{:}] = strread( str, '%8c%2c%4f%7f%4c%4u%4u%4u+%2u' ... , 'delimiter', ' ', 'whitespace', '' ); try date_vec = nan(1,3); date_vec( [2,3,1] ) = sscanf( file_name, '%2u-%2u-%4u%*s' ); catch me if strcmp( me.identifier, 'MATLAB:index_assign_element_count_mismatch' ) warning( 'ReadOneSoniData:CannotParseFileName' ... , 'Cannot extract a date from file name: "%s"' ... , file_name ) rain_data = struct([]); return else rethrow( me ) end end str = transpose( char( cac{1} ) ); vec = nan( size(str,2), 3 ); [ vec(:,1), vec(:,2), vec(:,3) ] ... = strread( str, '%2u:%2u:%2u', 'delimiter','','whitespace','' ); rain_data.Created = datestr( now, 'yyyy-mm-dd HH:MM:SS' ); rain_data.DataFile = fullfile( folder_name, file_name ); rain_data.Datevec = [ repmat( date_vec, [size(vec,1),1] ), vec ]; rain_data.DayNumber = datenum( date_vec ); rain_data.Rain = cac{3}; rain_data.DailyRain = sum( rain_data.Rain ); % and more as you see fit.
end
Best Answer