Code covered by the BSD License  

Highlights from
windcan

from windcan by Josh Wiebe
This program downloads hourly climate data from Environment Canada and then plucks the wind data.

windcan
function windcan
% COPYRIGHT (C) 2009, JOSH WIEBE
% DISTRIBUTED "AS IS" UNDER THE BSD SOFTWARE LICENCE, SEE LICENCE FILE
% THIS PROGRAM USES THE URLWRITE COMMAND TO DOWNLOAD HOURLY CLIMATE DATA FROM THE ENVIRONMENT CANADA WEBSITE
% WIND DATA IS THEN PLUCKED FROM THE DOWNLOADED FILES AND SAVED IN A CSV FILE WHICH CAN LATER BE ANALYSED
% IN WRPLOT OR A SIMILAR PROGRAM, OUTPUT FILE COLUMN ORDER IS YEAR, MONTH, DAY, HOUR, DIRECTION, SPEED

fprintf ('See http://climate.weatheroffice.ec.gc.ca/climateData/canada_e.html \n select location, scroll to link to "bulk data", station id appears in menu bar. \n e.g. Ottawa = 4337 \n');
stationid = input('Enter Station ID  ');
year1 = input('Enter start year  ');   
year2 = input('Enter end year  '); 
month1 = input('Enter start month, enter 1 for January '); 
month2 = input('Enter end month  '); 
filename = input('Enter output file name:  ', 's'); 

N = (month2-month1+1)*(year2-year1+1);
year = year1;
month = month1;

% ROUTINE TO DOWNLOAD CLIMATE DATA
for i=1:N
urlwrite(sprintf('http://www.climate.weatheroffice.ec.gc.ca/climateData/bulkdata_e.html?timeframe=1&Prov=XX&StationID=%i&Year=%i&Month=%i&Day=1&format=csv&type=hly', stationid, year, month), sprintf('%i%i%i.csv', stationid, year, month));
	if month < month2;
		month = month +1;
	else
		month = month1;
		year = year+1;
	end %if
end %for

% RESET PARAMETERS, ASSIGN NAME FOR OUTPUT FILE
year = year1;
month = month1;
s = 'YEAR, MONTH, DAY, HOUR, DIRECTION, SPEED (m/s)';
dlmwrite(filename, s, '');

% ROUTINE TO PLUCK WIND DATA FROM DOWNLOADED CLIMATE DATA
for i=1:N
	temp=dlmread(sprintf('%i%i%i.csv', stationid, year, month), ' "," ');  % ' "," ' USED AS DELIMITER BECAUSE THE .CSV FILE USES QUOTATION MARKS AROUND TEXT FIELDS
	L=length(temp);
	yearI = temp (15:L, 6); % START IMPORT AT ROW 15, COLUMN 6 IS YEAR
	monthI = temp (15:L, 9);
	dayI = temp (15:L, 12);
	hourI = temp (15:L, 15);
	winddir = temp (15:L, 36);
	windspd = temp (15:L, 42);
	winddat(:,1) = yearI; % PUT DATA INTO ONE MATRIX
	winddat(:,2) = monthI;
	winddat(:,3) = dayI;
	winddat(:,4) = hourI;
	winddat(:,5) = winddir*10; % WIND DIRECTION IN 10 DEGREE BINS
	winddat(:,6) = windspd*0.278; % CONVERT WINDSPEED FROM KPH TO MPS
	dlmwrite(filename, winddat, ',' , '-append'); %APPEND MATRIX "WINDDAT" TO OUTPUT FILE
	clear winddat; %CLEAR THE WINDDAT VARIABLE ONLY

	if month < month2;
		month = month +1;
	else
		month = month1;
		year = year+1;
	end %if
end %for
end %function

Contact us