import java.util.*; import java.io.*; import java.net.*; public class WeatherFormat { public static final int SUNNY= 0; public static final int PARTLY_CLOUDY_AND_SHOWERS = 1; public static final int SHOWERS = 2; public static final int RAIN = 3; public static final int SNOW_SHOWERS = 4; public static final int PARTLY_CLOUDY = 5; public static final int INVALID = -1; public static final int ENGLISH = 0; public static final int METRIC = 1; String filename; int measurementUnits; Calendar sampleTime; double insideTemp = 0.0; double outsideTemp = 0.0; int insideHumidity = 0; int outsideHumidity= 0; double barometricPressure = 0.0; int windDirection = 0; int windSpeed = 0; double windChill = 0.0; double dewPoint = 0.0; double totalRain = 0.0; String cloudCover = ""; String comments = ""; String barometricTrend = ""; double recordDailyHighOutsideTemperature = 0.0; Calendar recordDailyHighOutsideTemperatureTime; double recordHighOutsideTemperature = 0.0; Calendar recordHighOutsideTemperatureTime; double recordDailyLowOutsideTemperature = 0.0; Calendar recordDailyLowOutsideTemperatureTime; double recordLowOutsideTemperature = 0.0; Calendar recordLowOutsideTemperatureTime; double recordDailyHighInsideTemperature = 0.0; Calendar recordDailyHighInsideTemperatureTime; double recordHighInsideTemperature = 0.0; Calendar recordHighInsideTemperatureTime; double recordDailyLowInsideTemperature = 0.0; Calendar recordDailyLowInsideTemperatureTime; double recordLowInsideTemperature = 0.0; Calendar recordLowInsideTemperatureTime; double recordDailyHighOutsideHumidity = 0.0; Calendar recordDailyHighOutsideHumidityTime; double recordHighOutsideHumidity = 0.0; Calendar recordHighOutsideHumidityTime; double recordDailyLowOutsideHumidity = 0.0; Calendar recordDailyLowOutsideHumidityTime; double recordLowOutsideHumidity = 0.0; Calendar recordLowOutsideHumidityTime; double recordDailyHighInsideHumidity = 0.0; Calendar recordDailyHighInsideHumidityTime; double recordHighInsideHumidity = 0.0; Calendar recordHighInsideHumidityTime; double recordDailyLowInsideHumidity = 0.0; Calendar recordDailyLowInsideHumidityTime; double recordLowInsideHumidity = 0.0; Calendar recordLowInsideHumidityTime; double recordDailyHighBarometricPressure = 0.0; Calendar recordDailyHighBarometricPressureTime; double recordHighBarometricPressure = 0.0; Calendar recordHighBarometricPressureTime; double recordDailyLowBarometricPressure = 0.0; Calendar recordDailyLowBarometricPressureTime; double recordLowBarometricPressure = 0.0; Calendar recordLowBarometricPressureTime; double recordDailyHighWindSpeed = 0.0; Calendar recordDailyHighWindSpeedTime; double recordHighWindSpeed = 0.0; Calendar recordHighWindSpeedTime; double recordDailyLowWindSpeed = 0.0; Calendar recordDailyLowWindSpeedTime; double recordLowWindSpeed = 0.0; Calendar recordLowWindSpeedTime; double recordDailyHighDewPoint = 0.0; Calendar recordDailyHighDewPointTime; double recordHighDewPoint = 0.0; Calendar recordHighDewPointTime; double recordDailyLowDewPoint = 0.0; Calendar recordDailyLowDewPointTime; double recordLowDewPoint = 0.0; Calendar recordLowDewPointTime; double recordDailyHighWindChill = 0.0; Calendar recordDailyHighWindChillTime; double recordHighWindChill = 0.0; Calendar recordHighWindChillTime; double recordDailyLowWindChill = 0.0; Calendar recordDailyLowWindChillTime; double recordLowWindChill = 0.0; Calendar recordLowWindChillTime; double rainToday = 0.0; double rainThisWeek = 0.0; double rainThisMonth = 0.0; double rainPast24Hours = 0.0; double rainThisYear = 0.0; int forecast = 0; String forecastText; int weatherStationUpdateInterval = 0; int databaseUpdateInterval = 0; String weatherStationType = ""; String triGeoWebPageName = ""; String cityName = ""; String latitude = ""; String longitude = ""; String emailAddress = ""; String pageURL = ""; int elevation = 0; String zipCode = ""; public WeatherFormat () { } public WeatherFormat (String filename) { this.filename = filename; updateData(); } public void updateData() { URL datafile; URLConnection c; try { datafile = new URL (filename); c = datafile.openConnection(); System.out.println (c.getContentType()); BufferedReader b = new BufferedReader (new InputStreamReader (c.getInputStream())); String s; // throw away comment lines s = b.readLine(); s = b.readLine(); s = b.readLine(); s = b.readLine(); s = b.readLine(); // get measurement units s = b.readLine(); measurementUnits = convertToInt (s); // throw away comment lines s = b.readLine(); s = b.readLine(); // current weather s = b.readLine(); sampleTime = convertToTime (s); s = b.readLine(); insideTemp = convertToDouble (s); s = b.readLine(); outsideTemp = convertToDouble (s); s = b.readLine(); insideHumidity = convertToInt (s); s = b.readLine(); outsideHumidity = convertToInt (s); s = b.readLine(); barometricPressure = convertToDouble (s); s = b.readLine(); windDirection = convertToInt (s); s = b.readLine(); windSpeed = convertToInt (s); s = b.readLine(); windChill = convertToDouble (s); s = b.readLine(); dewPoint = convertToDouble (s); s = b.readLine(); totalRain = convertToDouble (s); s = b.readLine(); cloudCover = cropString (s); s = b.readLine(); comments = cropString (s); s = b.readLine(); barometricTrend = cropString (s); // get rid of 2 empty lines s = b.readLine(); s = b.readLine(); // records s = b.readLine(); recordDailyHighOutsideTemperature = convertToDouble (s); s = b.readLine(); recordHighOutsideTemperature = convertToDouble (s); s = b.readLine(); recordDailyLowOutsideTemperature = convertToDouble (s); s = b.readLine(); recordLowOutsideTemperature = convertToDouble (s); s = b.readLine(); recordDailyHighInsideTemperature = convertToDouble (s); s = b.readLine(); recordHighInsideTemperature = convertToDouble (s); s = b.readLine(); recordDailyLowInsideTemperature = convertToDouble (s); s = b.readLine(); recordLowInsideTemperature = convertToDouble (s); s = b.readLine(); recordDailyHighOutsideHumidity = convertToDouble (s); s = b.readLine(); recordHighOutsideHumidity = convertToDouble (s); s = b.readLine(); recordDailyLowOutsideHumidity = convertToDouble (s); s = b.readLine(); recordLowOutsideHumidity = convertToDouble (s); s = b.readLine(); recordDailyHighInsideHumidity = convertToDouble (s); s = b.readLine(); recordHighInsideHumidity = convertToDouble (s); s = b.readLine(); recordDailyLowInsideHumidity = convertToDouble (s); s = b.readLine(); recordLowInsideHumidity = convertToDouble (s); s = b.readLine(); recordDailyHighBarometricPressure = convertToDouble (s); s = b.readLine(); recordHighBarometricPressure = convertToDouble (s); s = b.readLine(); recordDailyLowBarometricPressure = convertToDouble (s); s = b.readLine(); recordLowBarometricPressure = convertToDouble (s); s = b.readLine(); recordDailyHighWindSpeed = convertToDouble (s); s = b.readLine(); recordHighWindSpeed = convertToDouble (s); s = b.readLine(); recordDailyLowWindSpeed = convertToDouble (s); s = b.readLine(); recordLowWindSpeed = convertToDouble (s); s = b.readLine(); recordDailyHighDewPoint = convertToDouble (s); s = b.readLine(); recordHighDewPoint = convertToDouble (s); s = b.readLine(); recordDailyLowDewPoint = convertToDouble (s); s = b.readLine(); recordLowDewPoint = convertToDouble (s); s = b.readLine(); recordDailyHighWindChill = convertToDouble (s); s = b.readLine(); recordHighWindChill = convertToDouble (s); s = b.readLine(); recordDailyLowWindChill = convertToDouble (s); s = b.readLine(); recordLowWindChill = convertToDouble (s); s = b.readLine(); s = b.readLine(); s = b.readLine(); recordDailyHighOutsideTemperatureTime = convertToTime (s); s = b.readLine(); recordHighOutsideTemperatureTime = convertToTime (s); s = b.readLine(); recordDailyLowOutsideTemperatureTime = convertToTime (s); s = b.readLine(); recordLowOutsideTemperatureTime = convertToTime (s); s = b.readLine(); recordDailyHighInsideTemperatureTime = convertToTime (s); s = b.readLine(); recordHighInsideTemperatureTime = convertToTime (s); s = b.readLine(); recordDailyLowInsideTemperatureTime = convertToTime (s); s = b.readLine(); recordLowInsideTemperatureTime = convertToTime (s); s = b.readLine(); recordDailyHighOutsideHumidityTime = convertToTime (s); s = b.readLine(); recordHighOutsideHumidityTime = convertToTime (s); s = b.readLine(); recordDailyLowOutsideHumidityTime = convertToTime (s); s = b.readLine(); recordLowOutsideHumidityTime = convertToTime (s); s = b.readLine(); recordDailyHighInsideHumidityTime = convertToTime (s); s = b.readLine(); recordHighInsideHumidityTime = convertToTime (s); s = b.readLine(); recordDailyLowInsideHumidityTime = convertToTime (s); s = b.readLine(); recordLowInsideHumidityTime = convertToTime (s); s = b.readLine(); recordDailyHighBarometricPressureTime = convertToTime (s); s = b.readLine(); recordHighBarometricPressureTime = convertToTime (s); s = b.readLine(); recordDailyLowBarometricPressureTime = convertToTime (s); s = b.readLine(); recordLowBarometricPressureTime = convertToTime (s); s = b.readLine(); recordDailyHighWindSpeedTime = convertToTime (s); s = b.readLine(); recordHighWindSpeedTime = convertToTime (s); s = b.readLine(); recordDailyLowWindSpeedTime = convertToTime (s); s = b.readLine(); recordLowWindSpeedTime = convertToTime (s); s = b.readLine(); recordDailyHighDewPointTime = convertToTime (s); s = b.readLine(); recordHighDewPointTime = convertToTime (s); s = b.readLine(); recordDailyLowDewPointTime = convertToTime (s); s = b.readLine(); recordLowDewPointTime = convertToTime (s); s = b.readLine(); recordDailyHighWindChillTime = convertToTime (s); s = b.readLine(); recordHighWindChillTime = convertToTime (s); s = b.readLine(); recordDailyLowWindChillTime = convertToTime (s); s = b.readLine(); recordLowWindChillTime = convertToTime (s); s = b.readLine(); rainToday = convertToDouble (s); s = b.readLine(); rainThisWeek = convertToDouble (s); s = b.readLine(); rainThisMonth = convertToDouble (s); s = b.readLine(); rainPast24Hours = convertToDouble (s); s = b.readLine(); rainThisYear = convertToDouble (s); s = b.readLine(); forecast = convertToInt (s); s = b.readLine(); forecastText = cropString (s); s = b.readLine(); weatherStationUpdateInterval = convertToInt (s); s = b.readLine(); databaseUpdateInterval = convertToInt (s); s = b.readLine(); weatherStationType = cropString (s); s = b.readLine(); triGeoWebPageName = cropString (s); s = b.readLine(); cityName = cropString (s); s = b.readLine(); latitude = cropString (s); s = b.readLine(); longitude = cropString (s); s = b.readLine(); emailAddress = cropString (s); s = b.readLine(); pageURL = cropString (s); s = b.readLine(); elevation = convertToInt (s); s = b.readLine(); zipCode = cropString (s); } catch (MalformedURLException e) { System.out.println (e); e.printStackTrace(); } catch (IOException e) { System.out.println (e); e.printStackTrace(); } } Calendar convertToTime (String s) { StringTokenizer st = new StringTokenizer (s, " "); String s1 = st.nextToken(); String s2 = st.nextToken(); Calendar c = Calendar.getInstance(); int year, month, date, hour, minute, second; StringTokenizer st2 = new StringTokenizer (s1, ":"); String s3 = st2.nextToken(); hour = Integer.parseInt (s3); s3 = st2.nextToken(); minute = Integer.parseInt (s3); s3 = st2.nextToken(); second = Integer.parseInt (s3); StringTokenizer st3 = new StringTokenizer (s2, "/"); s3 = st3.nextToken(); month = Integer.parseInt (s3); s3 = st3.nextToken(); date = Integer.parseInt (s3); s3 = st3.nextToken(); year = Integer.parseInt (s3); c.set (year, month, date, hour, minute, second); return c; } int convertToInt (String s) { StringTokenizer st = new StringTokenizer (s, "//"); String s1 = st.nextToken(); return Integer.parseInt (s1.trim()); } double convertToDouble (String s) { StringTokenizer st = new StringTokenizer (s, "//"); String s1 = st.nextToken(); Double d = new Double (s1.trim()); return d.doubleValue(); } String cropString (String s) { if (s.equals ("")) { return s; } StringTokenizer st = new StringTokenizer (s, "//"); return st.nextToken().trim(); } public int getMeasurementUnits() { return measurementUnits; } public Calendar getSampleTime() { return sampleTime; } public double getInsideTemp() { return insideTemp; } public double getOutsideTemp() { return outsideTemp; } public int getInsideHumidity() { return insideHumidity; } public int getOutsideHumidity() { return outsideHumidity; } public double getBarometricPressure() { return barometricPressure; } public int getWindDirection() { return windDirection; } public int getWindSpeed() { return windSpeed; } public double getWindChill() { return windChill; } public double getDewPoint() { return dewPoint; } public double getTotalRain() { return totalRain; } public String getCloudCover() { return cloudCover; } public String getComments() { return comments; } public String getBarometricTrend() { return barometricTrend; } public double getRecordDailyHighOutsideTemperature() { return recordDailyHighOutsideTemperature; } public Calendar getRecordDailyHighOutsideTemperatureTime() { return recordDailyHighOutsideTemperatureTime; } public double getRecordHighOutsideTemperature() { return recordHighOutsideTemperature; } public Calendar getRecordHighOutsideTemperatureTime() { return recordHighOutsideTemperatureTime; } public double getRecordDailyLowOutsideTemperature() { return recordDailyLowOutsideTemperature; } public Calendar getRecordDailyLowOutsideTemperatureTime() { return recordDailyLowOutsideTemperatureTime; } public double getRecordLowOutsideTemperature() { return recordLowOutsideTemperature; } public Calendar getRecordLowOutsideTemperatureTime() { return recordLowOutsideTemperatureTime; } double getRecordDailyHighInsideTemperature() { return recordDailyHighInsideTemperature; } Calendar getRecordDailyHighInsideTemperatureTime() { return recordDailyHighInsideTemperatureTime; } double getRecordHighInsideTemperature() { return recordHighInsideTemperature; } Calendar getRecordHighInsideTemperatureTime() { return recordHighInsideTemperatureTime; } double getRrecordDailyLowInsideTemperature() { return recordDailyLowInsideTemperature; } Calendar getRecordDailyLowInsideTemperatureTime() { return recordDailyLowInsideTemperatureTime; } double getRecordLowInsideTemperature() { return recordLowInsideTemperature; } Calendar getRecordLowInsideTemperatureTime() { return recordLowInsideTemperatureTime; } double getRecordDailyHighOutsideHumidity() { return recordDailyHighOutsideHumidity; } Calendar getRecordDailyHighOutsideHumidityTime() { return recordDailyHighOutsideHumidityTime; } double getRecordHighOutsideHumidity() { return recordHighOutsideHumidity; } Calendar getRecordHighOutsideHumidityTime() { return recordHighOutsideHumidityTime; } double getRecordDailyLowOutsideHumidity() { return recordDailyLowOutsideHumidity; } Calendar getRecordDailyLowOutsideHumidityTime() { return recordDailyLowOutsideHumidityTime; } double getRecordLowOutsideHumidity() { return recordLowOutsideHumidity; } Calendar getRecordLowOutsideHumidityTime() { return recordLowOutsideHumidityTime; } double getRecordDailyHighInsideHumidity() { return recordDailyHighInsideHumidity; } Calendar getRecordDailyHighInsideHumidityTime() { return recordDailyHighInsideHumidityTime; } double getRecordHighInsideHumidity() { return recordHighInsideHumidity; } Calendar getRecordHighInsideHumidityTime() { return recordHighInsideHumidityTime; } double getRecordDailyLowInsideHumidity() { return recordDailyLowInsideHumidity; } Calendar getRecordDailyLowInsideHumidityTime() { return recordDailyLowInsideHumidityTime; } double getRecordLowInsideHumidity() { return recordLowInsideHumidity; } Calendar getRecordLowInsideHumidityTime() { return recordLowInsideHumidityTime; } double getRecordDailyHighBarometricPressure() { return recordDailyHighBarometricPressure; } Calendar getRecordDailyHighBarometricPressureTime() { return recordDailyHighBarometricPressureTime; } double getRecordHighBarometricPressure() { return recordHighBarometricPressure; } Calendar getRecordHighBarometricPressureTime() { return recordHighBarometricPressureTime; } double getRecordDailyLowBarometricPressure() { return recordDailyLowBarometricPressure; } Calendar getRecordDailyLowBarometricPressureTime() { return recordDailyLowBarometricPressureTime; } double getRecordLowBarometricPressure() { return recordLowBarometricPressure; } Calendar getRecordLowBarometricPressureTime() { return recordLowBarometricPressureTime; } double getRecordDailyHighWindSpeed() { return recordDailyHighWindSpeed; } Calendar getRecordDailyHighWindSpeedTime() { return recordDailyHighWindSpeedTime; } double getRecordHighWindSpeed() { return recordHighWindSpeed; } Calendar getRecordHighWindSpeedTime() { return recordHighWindSpeedTime; } double getRecordDailyLowWindSpeed() { return recordDailyLowWindSpeed; } Calendar getRecordDailyLowWindSpeedTime() { return recordDailyLowWindSpeedTime; } double getRecordLowWindSpeed() { return recordLowWindSpeed; } Calendar getRecordLowWindSpeedTime() { return recordLowWindSpeedTime; } double getRecordDailyHighDewPoint() { return recordDailyHighDewPoint; } Calendar getRecordDailyHighDewPointTime() { return recordDailyHighDewPointTime; } double getRecordHighDewPoint() { return recordHighDewPoint; } Calendar getRecordHighDewPointTime() { return recordHighDewPointTime; } double getRecordDailyLowDewPoint() { return recordDailyLowDewPoint; } Calendar getRecordDailyLowDewPointTime() { return recordDailyLowDewPointTime; } double getRecordLowDewPoint() { return recordLowDewPoint; } Calendar getRecordLowDewPointTime() { return recordLowDewPointTime; } double getRecordDailyHighWindChill() { return recordDailyHighWindChill; } Calendar getRecordDailyHighWindChillTime() { return recordDailyHighWindChillTime; } double getRecordHighWindChill() { return recordHighWindChill; } Calendar getRecordHighWindChillTime() { return recordHighWindChillTime; } double getRecordDailyLowWindChill() { return recordDailyLowWindChill; } Calendar getRecordDailyLowWindChillTime() { return recordDailyLowWindChillTime; } double getRecordLowWindChill() { return recordLowWindChill; } Calendar getRecordLowWindChillTime() { return recordLowWindChillTime; } double getRainToday() { return rainToday; } double getRainThisWeek() { return rainThisWeek; } double getR0ainThisMonth() { return rainThisMonth; } double getRainPast24Hours() { return rainPast24Hours; } double getRainThisYear() { return rainThisYear; } int getForecast() { return forecast; } String getForecastText() { return forecastText; } int getWeatherStationUpdateInterval() { return weatherStationUpdateInterval; } int getDatabaseUpdateInterval() { return databaseUpdateInterval; } String getWeatherStationType() { return weatherStationType; } String getTriGeoWebPageName() { return triGeoWebPageName; } String getCityName() { return cityName; } String getLatitude() { return latitude; } String getLongitude() { return longitude; } String getEmailAddress() { return emailAddress; } String getPageURL() { return pageURL; } int getElevation() { return elevation; } String getZipCode() { return zipCode; } public static void main (String[] argv) { WeatherFormat wf = new WeatherFormat ("http://www.eecs.wsu.edu/~cs253/contest/WWCWeather.txt"); System.out.println(wf.getCityName() + " " + wf.recordDailyLowInsideTemperature); } }