/* * [PreSort.java] * * Summary: adds kwh energy column so can sort activities. * * Copyright: (c) 2015-2017 Roedy Green, Canadian Mind Products, http://mindprod.com * * Licence: This software may be copied and used freely for any purpose but military. * http://mindprod.com/contact/nonmil.html * * Requires: JDK 1.8+ * * Created with: JetBrains IntelliJ IDEA IDE http://www.jetbrains.com/idea/ * * Version History: * 1.0 2015-12-13 initial version. */ package com.mindprod.powcost; import com.mindprod.common18.EIO; import com.mindprod.csv.CSVReader; import com.mindprod.csv.CSVWriter; import com.mindprod.entities.DeEntifyStrings; import java.io.EOFException; import java.io.File; import java.text.DecimalFormat; /** * adds kwh energy column so can sort activities. * * @author Roedy Green, Canadian Mind Products * @version 1.0 2015-12-13 initial version. * @since 2015-12-13 */ public final class PreSort { private static final DecimalFormat DF2 = new DecimalFormat( "##0.000" ); /** * calc seconds in duration with units */ static double durationToSeconds( final double duration, final String units ) { switch ( units ) { case "second": case "seconds": return duration; case "minute": case "minutes": return duration * 60; case "hour": case "hours": return duration * 60 * 60; case "day": case "days": return duration * 60 * 60 * 24; case "week": case "weeks": return duration * 60 * 60 * 24 * 7; case "month": case "months": return duration * 60 * 60 * 24 * 30.4375; case "year": case "years": return duration * 60 * 60 * 24 * 365.25; case "decade": case "decades": return duration * 60 * 60 * 24 * 365.25 * 10; default: throw new IllegalArgumentException( "invalid duration unit " + units ); } } /** * Allow this Applet to run as as application as well. * * @param args command line arguments ignored. */ public static void main( String args[] ) throws java.io.IOException { // must run in com\mindprod\powcost final CSVReader activitiesCSV = new CSVReader( EIO.getBufferedReader( new File( "activities.csv" ), 64 * 1024, EIO.UTF8 ) ); final CSVWriter w = new CSVWriter( EIO.getPrintWriter( new File( "activities2.csv" ), 64 * 1024, EIO.UTF8 ) ); w.nl( "list of possible activities" ); w.nl( "# watts, duty cycle%, duration, unit, description (with entities), energy in MWatts(calc)" ); try { while ( true ) { // 3000, 100, 1, hour, heat 32 gallons of water electrically to wash a load of clothes. final double watts = activitiesCSV.getDouble(); if ( watts == 0 ) { continue; // ignore blank lines } final double dutyCycleInPercent = activitiesCSV.getDouble(); final double duration = activitiesCSV.getDouble(); final String units = activitiesCSV.get(); final String activityDescription = DeEntifyStrings.deEntifyHTML( activitiesCSV.get(), ' ' ); activitiesCSV.skipToNextLine(); final double seconds = durationToSeconds( duration, units ); final double energyInKwh = ( watts / 1000 * seconds / ( 60 * 60 ) * dutyCycleInPercent / 100 ); w.put( watts ); w.put( dutyCycleInPercent ); w.put( duration ); w.put( units ); w.put( activityDescription ); w.put( DF2.format( energyInKwh ) ); w.nl(); } } catch ( EOFException e ) { activitiesCSV.close(); w.close(); } } // end main }