# HG changeset patch # User Axel Jacobs # Date 1387149220 0 # Node ID 66e192fe711ee87851450d20993a4042c7b0768d # Parent de81adde2cae703df9cb35a77aee22433f8991da epw2wea: New file converter for EnergyPlus weather to DaySim diff -r de81adde2cae -r 66e192fe711e bin/epw2wea.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/epw2wea.pl Sun Dec 15 23:13:40 2013 +0000 @@ -0,0 +1,118 @@ +#!/usr/bin/perl +# +# Convert EnergyPlus EPW weather file to DaySim wea format or CSV +# +# Axel Jacobs, 15 Dec 2013 + +use strict; +use warnings; + +my $output; # Default output is to STDOUT +my $csv = 0; # Output CSV file, not DaySim wea format +my $delimiter = ' '; # Delimiter. Default is ' ' which is for DaySim wea +my $delim = ' '; + +while (@ARGV) { + $_ = $ARGV[0]; + if (m/-o/) { # Output file. Default is STDOUT + $output = $ARGV[1]; + shift @ARGV; + } elsif (m/-c/) { # Output CSV file, not DaySim wea format + $csv = 1; + } elsif (m/-d/) { # Delimiter for CSV output + $delim = $ARGV[1]; + shift @ARGV; + } elsif (m/^-\w/) { + die("epw2wea: Bad option: $_\n"); + } else { + last; + } + shift @ARGV; +} +if ($csv == 1) { + $delimiter = $delim; # Delimiter for CSV output +} + +if ($output) { + open(OUTPUT, '>', $output) + or die("Cannot open file '$output' for writing: $!\n"); +} else { + *OUTPUT = *STDOUT; +} + +# Extract latitude, longitude etc from first input line +my $line = <>; +#$line =~ s/\r//; # Remove DOS line ending +chomp $line; +my @fields = split(/,/, $line); +my $city = $fields[1]; +my $country = $fields[3]; +my $lat = $fields[6]; +my $lon = -1 * $fields[7]; +my $mer = -15 * $fields[8]; +my $ele = $fields[9]; + +if ($csv == 1) { + my @epw_header = ('Year', 'Month', 'Day', 'Hour', 'Minute', + 'Uncertainty', 'DryBulb', 'DewPoint', 'RelHum', 'Press', + 'Ees0', 'Eesn0', 'Eird', 'Eeg', 'Eesn', 'Eed', + 'Evg', 'Evsn', 'Evd', 'Lz', + 'WindDir', 'WindSpeed', + 'TotalSkyCover', 'OpaqueSkyCover', 'Visibility', 'Ceiling', + 'PresentObs', 'PresentCode', + 'PrecWater', 'AerosolOpticalDepth', 'SnowDepth', 'LastSnowfall' + ); + print OUTPUT join($delimiter, @epw_header) . "\n"; +} else { + print OUTPUT <= 1; $i--) { + $line = <>; +} + + +# Process body +while (<>) { + my $line = $_; + $line =~ s/\r//g; # Remove DOS line ending + chomp $line; + @fields = split(/,/, $line); + my $month = $fields[1]; + my $day = $fields[2]; + my $hour = $fields[3]; + my $hour2 = sprintf '%.3f', $hour - .5; + # Ignore minute column. + my $Eeg = $fields[13]; + my $Eesn = $fields[14]; + my $Eed = $fields[15]; + my $Evg = $fields[16]; + my $Evsn = $fields[17]; + my $Evd = $fields[18]; + my @columns = (); + if ($csv == 1) { + # Output all columns if CSV output is requested + @columns = @fields; + } else { + # Only output the columns relevant to DaySim wea format + @columns = ( + $month, + $day, + $hour2, + $Eesn, + $Eed + ); + } + print OUTPUT join($delimiter, @columns) . "\n"; +} +close(OUTPUT); + +#EOF