diff --git "a/BP\347\245\236\347\273\217\347\275\221\347\273\234\351\242\204\346\265\213\350\227\273\347\261\273\347\224\237\347\211\251\351\207\217-\346\225\260\346\215\256\344\270\216MATLAB\344\273\243\347\240\201.zip" "b/BP\347\245\236\347\273\217\347\275\221\347\273\234\351\242\204\346\265\213\350\227\273\347\261\273\347\224\237\347\211\251\351\207\217-\346\225\260\346\215\256\344\270\216MATLAB\344\273\243\347\240\201.zip" deleted file mode 100644 index bc031df..0000000 Binary files "a/BP\347\245\236\347\273\217\347\275\221\347\273\234\351\242\204\346\265\213\350\227\273\347\261\273\347\224\237\347\211\251\351\207\217-\346\225\260\346\215\256\344\270\216MATLAB\344\273\243\347\240\201.zip" and /dev/null differ diff --git a/Chapter8/rain_data/climate_file.py b/Chapter8/rain_data/climate_file.py new file mode 100644 index 0000000..2bff2b2 --- /dev/null +++ b/Chapter8/rain_data/climate_file.py @@ -0,0 +1,37 @@ +# -*- coding: UTF-8 -*- +__author__ = 'zy' +__time__ = '2019/4/16 20:01' +import os + + +def file_name(file_dir): + + for root, dirs, files in os.walk(file_dir): + print(root) # 当前目录路径 + print(dirs) # 当前路径下所有子目录 + print(files) # 当前路径下所有非目录子文件 + + print('---------') + print(files) + return files + +if __name__=='__main__': + root_source=r'C:\Users\hp\Desktop\气象数据' + file_list=file_name(root_source) + path=r'C:\Users\hp\Desktop\java_file' + # 修改当前工作目录 + os.chdir(path) + # 查看修改后的工作目录 + retval = os.getcwd() + print(retval) + cmds=[] + for i in file_list: + print(i) + i=r'C:\Users\hp\Desktop\气象数据'+'\\'+i + cmds.append('java -classpath . ishJava'+' '+i+' '+i+'.out') + + for cmd in cmds: + os.system(cmd) + print('处理一个') + + diff --git a/Chapter8/rain_data/ishJava.class b/Chapter8/rain_data/ishJava.class new file mode 100644 index 0000000..aadd542 Binary files /dev/null and b/Chapter8/rain_data/ishJava.class differ diff --git a/Chapter8/rain_data/ishJava.java b/Chapter8/rain_data/ishJava.java new file mode 100644 index 0000000..655dad6 --- /dev/null +++ b/Chapter8/rain_data/ishJava.java @@ -0,0 +1,1787 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Produce simplified form from ISH file. +* +* Parameters: +* 1st = Input File Name +* 2nd = Output File Name +* 3rd = Logging level +* 4th = Logging Filter #1 +* 5th = Logging Filter #2 +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* Date: Developer PR/CR # Description of changes +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* 03/10/2011 ras ???? Created. +* +* 06/06/2012 ras ???? Added AW1-AW4 (Automated Present Weather) +* Corrected problem when OC1 was missing +* +* 06/21/2012 ras ???? Modified Wind Dir logic to set value to 990 when +* Type code is 'V' +* Added MW4 (Manual Present Weather) +* +* 03/24/2015 ras ???? Added GDx logic to fill in Sky Cover info when GF1 +* is missing. +* +* 05/04/2016 ras ???? May The Fourth be with you as you seek and destroy +* the bug in the AT1 element that causes the false +* detection of AWx, AUx, and MWx elements. +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +import java.io.*; +//import java.lang.Math.*; +import java.util.Date; +import java.util.*; +//import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.text.NumberFormat; +import java.text.DecimalFormat; + +/** + * Mainline logic. + */ +public class ishJava +{ + static String sProgramName = "ishJava.java"; + static String sDebugName = "ishJava"; + static String sInFileName = ""; + static String sOutFileName = ""; + static FileOutputStream fDebug = null; + + static boolean bVerbose = false; + static boolean bOnce = false; + static boolean bStdErr = false; + + static String sOutputRecord = ""; + static String sControlSection = ""; + static String sMandatorySection = ""; + static int iCounter = 0; + static int iLength = 0; + static int iOffset = 25; + static int iObsKey = 0; + static int iWork = 0; + static String[] sWW1234; + static String[] sAW1234; + static float fWork = 0; + static float fWorkSave = 0; + static String sConcat = ""; + static String sConcatDate = ""; + static String sConcatMonth = ""; + static String sMessage = ""; + + static final int iPROD = 0; // Only print basic run info + static final int iDEBUG = 1; // Print lots of info, such as debug messages + static int iLogLevel = 0; // Default value for this run. + static String p_sFilter1 = "None"; + static String p_sFilter2 = "None"; + + static NumberFormat fmt03 = new DecimalFormat("000"); // 3-char int (keep leading zeros) + static NumberFormat fmt4_1 = new DecimalFormat("#0.0"); // 4-char float + static NumberFormat fmt6_1 = new DecimalFormat("###0.0"); // 6-char float + static NumberFormat fmt5_2 = new DecimalFormat("##0.00"); // 5-char float + static NumberFormat fmt02 = new DecimalFormat("#0"); // 2-char int + +// Fields making up the Control Data Section. + static String sCDS = ""; + static String sCDS_Fill1 = ""; + static String sCDS_ID = ""; + static String sCDS_Wban = ""; + static String sCDS_Year = ""; + static String sCDS_Month = ""; + static String sCDS_Day = ""; + static String sCDS_Hour = ""; + static String sCDS_Minute = ""; + static String sCDS_Source = ""; + static String sCDS_Fill2 = ""; + static String sCDS_Type = ""; + static String sCDS_Fill3 = ""; +// Fields making up the Mandatory Data Section. + static String sMDS = ""; + static String sMDS_Dir = ""; + static String sMDS_DirQ = ""; + static String sMDS_DirType = ""; + static String sMDS_Spd = ""; + static String sMDS_Fill2 = ""; + static String sMDS_Clg = ""; + static String sMDS_Fill3 = ""; + static String sMDS_Vsb = ""; + static String sMDS_Fill4 = ""; + static String sMDS_TempSign = ""; + static String sMDS_Temp = ""; + static String sMDS_Fill5 = ""; + static String sMDS_DewpSign = ""; + static String sMDS_Dewp = ""; + static String sMDS_Fill6 = ""; + static String sMDS_Slp = ""; + static String sMDS_Fill7 = ""; + +// REM offset + static int iREM_IndexOf = 0; + +// Fields making up the OC1 element +// Sample Element=[OC1...] + static int iOC1_IndexOf = 0; + static int iOC1_Length = 8; + static String sOC1 = ""; + static String sOC1_Fill1 = ""; + static String sOC1_Gus = ""; + static String sOC1_Fill2 = ""; + +// Fields making up the GF1 element + static int iGF1_IndexOf = 0; + static int iGF1_Length = 26; + static String sGF1 = ""; + static String sGF1_Fill1 = ""; + static String sGF1_Skc = ""; + static String sGF1_Fill2 = ""; + static String sGF1_Low = ""; + static String sGF1_Fill3 = ""; + static String sGF1_Med = ""; + static String sGF1_Fill4 = ""; + static String sGF1_Hi = ""; + static String sGF1_Fill5 = ""; + +// Fields making up the GDx element (Only need 1st 6 bytes) // 03/24/2015 ras + static int iGDx_IndexOf = 0; + static int iGDx_Length = 6; + static String sGDx = ""; // Length 6 + static String sGDx_Cov1 = ""; // Length 1 + static String sGDx_Cov2 = ""; // Length 2 + static String sGDx_Skc = ""; + +// static int iMW_Counter = 0; +// Fields making up the MW1-7 elements + static int iMW1_IndexOf = 0; + static int iMW1_Length = 6; + static String sMW1 = ""; + static String sMW1_Fill1 = ""; + static String sMW1_Ww = ""; + static String sMW1_Fill2 = ""; + + static int iMW2_IndexOf = 0; + static int iMW2_Length = 6; + static String sMW2 = ""; + static String sMW2_Fill1 = ""; + static String sMW2_Ww = ""; + static String sMW2_Fill2 = ""; + + static int iMW3_IndexOf = 0; + static int iMW3_Length = 6; + static String sMW3 = ""; + static String sMW3_Fill1 = ""; + static String sMW3_Ww = ""; + static String sMW3_Fill2 = ""; + + static int iMW4_IndexOf = 0; + static int iMW4_Length = 6; + static String sMW4 = ""; + static String sMW4_Fill1 = ""; + static String sMW4_Ww = ""; + static String sMW4_Fill2 = ""; + +// Fields making up the AY1 element + static int iAY1_IndexOf = 0; + static int iAY1_Length = 8; + static String sAY1 = ""; + static String sAY1_Fill1 = ""; + static String sAY1_Pw = ""; + static String sAY1_Fill2 = ""; + +// Fields making up the MA1 element + static int iMA1_IndexOf = 0; + static int iMA1_Length = 15; + static String sMA1 = ""; + static String sMA1_Fill1 = ""; + static String sMA1_Alt = ""; + static String sMA1_Fill2 = ""; + static String sMA1_Stp = ""; + static String sMA1_Fill3 = ""; + +// Max/Min fields + static String sMaxTemp = ""; + static String sMinTemp = ""; + +// Fields making up the KA1 element + static int iKA1_IndexOf = 0; + static int iKA1_Length = 13; + static String sKA1 = ""; + static String sKA1_Fill1 = ""; + static String sKA1_Code = ""; + static String sKA1_Temp = ""; + static String sKA1_Fill2 = ""; + +// Fields making up the KA2 element + static int iKA2_IndexOf = 0; + static int iKA2_Length = 13; + static String sKA2 = ""; + static String sKA2_Fill1 = ""; + static String sKA2_Code = ""; + static String sKA2_Temp = ""; + static String sKA2_Fill2 = ""; + +// Precip fields + static String sPcp01 = "*****"; + static String sPcp01t = " "; + static String sPcp06 = "*****"; + static String sPcp06t = " "; + static String sPcp24 = "*****"; + static String sPcp24t = " "; + static String sPcp12 = "*****"; + static String sPcp12t = " "; + +// Fields making up the AA1 element + static int iAA1_IndexOf = 0; + static int iAA1_Length = 11; + static String sAA1 = ""; + static String sAA1_Fill1 = ""; + static String sAA1_Hours = ""; + static String sAA1_Pcp = ""; + static String sAA1_Trace = ""; + static String sAA1_Fill2 = ""; + +// Fields making up the AA2 element + static int iAA2_IndexOf = 0; + static int iAA2_Length = 11; + static String sAA2 = ""; + static String sAA2_Fill1 = ""; + static String sAA2_Hours = ""; + static String sAA2_Pcp = ""; + static String sAA2_Trace = ""; + static String sAA2_Fill2 = ""; + +// Fields making up the AA3 element + static int iAA3_IndexOf = 0; + static int iAA3_Length = 11; + static String sAA3 = ""; + static String sAA3_Fill1 = ""; + static String sAA3_Hours = ""; + static String sAA3_Pcp = ""; + static String sAA3_Trace = ""; + static String sAA3_Fill2 = ""; + +// Fields making up the AA4 element + static int iAA4_IndexOf = 0; + static int iAA4_Length = 11; + static String sAA4 = ""; + static String sAA4_Fill1 = ""; + static String sAA4_Hours = ""; + static String sAA4_Pcp = ""; + static String sAA4_Trace = ""; + static String sAA4_Fill2 = ""; + +// Fields making up the AJ1 element + static int iAJ1_IndexOf = 0; + static int iAJ1_Length = 17; + static String sAJ1 = ""; + static String sAJ1_Fill1 = ""; + static String sAJ1_Sd = ""; + static String sAJ1_Fill2 = ""; + +// Fields making up the AW1-4 elements + static int iAW1_IndexOf = 0; + static int iAW1_Length = 6; + static String sAW1 = ""; + static String sAW1_Fill1 = ""; + static String sAW1_Zz = ""; + static String sAW1_Fill2 = ""; + + static int iAW2_IndexOf = 0; + static int iAW2_Length = 6; + static String sAW2 = ""; + static String sAW2_Fill1 = ""; + static String sAW2_Zz = ""; + static String sAW2_Fill2 = ""; + + static int iAW3_IndexOf = 0; + static int iAW3_Length = 6; + static String sAW3 = ""; + static String sAW3_Fill1 = ""; + static String sAW3_Zz = ""; + static String sAW3_Fill2 = ""; + + static int iAW4_IndexOf = 0; + static int iAW4_Length = 6; + static String sAW4 = ""; + static String sAW4_Fill1 = ""; + static String sAW4_Zz = ""; + static String sAW4_Fill2 = ""; + + static int iAT1_IndexOf = 0; + static int iAT2_IndexOf = 0; + static int iAT3_IndexOf = 0; + static int iAT4_IndexOf = 0; + static int iAT5_IndexOf = 0; + static int iAT6_IndexOf = 0; + static int iAT7_IndexOf = 0; + static int iAT8_IndexOf = 0; + static int iATx_Length = 12; + static int iATx_Cut = 0; + + static String sHeader = " USAF WBAN YR--MODAHRMN DIR SPD GUS CLG SKC L M H VSB "+ + "MW MW MW MW AW AW AW AW W TEMP DEWP SLP ALT STP MAX MIN PCP01 "+ + "PCP06 PCP24 PCPXX SD\n"; + + public static void main(String[] args) + { +// logIt(fDebug, iPROD, false, "---------------------------- Begin "+sProgramName); // Append output to log. +// logIt(fDebug, iPROD, false, "Number of args found=["+args.length+"]"); // Append output to log. + +// Process args + if (args.length <= 1) + { + bStdErr=true; + logIt(fDebug, iPROD, false, "Error. Input and Output filenames required."); // Append output to log. + System.exit(77); + } + + if (args.length >= 2) + { + sInFileName = args[0]; + sOutFileName = args[1]; + } + + if (args.length >= 3) + { + if (args[2].equals("0") || + args[2].equals("1")) + { + iLogLevel = Integer.parseInt(args[2]); // Safe to convert to int. + } + else + { + logIt(fDebug, iPROD, false, "Invalid log message level parameter=["+args[2]+"]. Must be 0 or 1. Defaulting to ["+iLogLevel+"]"); + } + } + + if (args.length >= 4) + { + p_sFilter1 = args[3]; + } + + if (args.length >= 5) + { + p_sFilter2 = args[4]; + } + +// sOutFileName = sInFileName+".java.out"; + + logIt(fDebug, iDEBUG, false, " Input Filename=["+sInFileName+"]"); // Append output to log. + logIt(fDebug, iDEBUG, false, " Output Filename=["+sOutFileName+"]"); // Append output to log. + logIt(fDebug, iDEBUG, false, " Logging Level=["+iLogLevel+"]"); // Append output to log. + logIt(fDebug, iDEBUG, false, "1st Log Message Filter=["+p_sFilter1+"]"); + logIt(fDebug, iDEBUG, false, "2nd Log Message Filter=["+p_sFilter2+"]"); +// End of args + + try + { + BufferedReader fInReader = new BufferedReader(new FileReader(sInFileName)); + + FileWriter fFixed = new FileWriter(sOutFileName); + BufferedWriter fFixedWriter = new BufferedWriter(fFixed); + + fFixedWriter.write(sHeader); // Put header into output file. + + try + { + String line = null; + String lineHold = null; + + while (( line = fInReader.readLine()) != null) + { + iCounter++; +// iOffset = 25; + iLength = line.length(); +// logIt(fDebug, iDEBUG, false, "Record # "+iCounter+" had iLength=["+iLength+"]"); +// System.out.println(line); + +// See where the REM section begins + iREM_IndexOf = line.indexOf("REM"); + if (iREM_IndexOf == -1) + { + iREM_IndexOf = 9999; // If no REM section then set to high value + } + + getCDS(line); // Fields making up the Control Data Section. + + sConcat = sCDS_ID+"-"+sCDS_Wban+"-"+sCDS_Year+"-"+sCDS_Month+"-"+sCDS_Day+" "+sCDS_Hour+":"+sCDS_Minute; + sConcatDate = sCDS_Year+"-"+sCDS_Month+"-"+sCDS_Day; + sConcatMonth = sCDS_Year+"-"+sCDS_Month; + + +// =-=-=-=-=-=-=-=-=-=-=-=-=-= Filter out all but a certain station/date =-=-=-=-=-=-=-=-=-=-=-=-=-= +// if ( (! sConcatDate.equals("2011-01-01")) && (! sConcatDate.equals("2010-01-02")) ) +// if ( (! sConcatDate.equals("2012-04-12")) ) // Whole Day +// if ( (! sConcatMonth.equals("2009-04")) ) // Whole month +// { +// continue; +// } +// +// logIt(fDebug, iDEBUG, false, "line=["+line+"] "); +// +// logIt(fDebug, iDEBUG, false, "Record # "+iCounter+" had sConcat=["+sConcat+"]"); +// +// if (iCounter >= 100) +// { +// logIt(fDebug, iDEBUG, false, "Max count reached. Stopping..."); +// fFixedWriter.flush(); +// fFixedWriter.close(); +// System.exit(22); +// } +// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Done =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + + +// If there is a generated record for an AT1 element, skip it +// iAT1_IndexOf = line.indexOf("AT1"); +// if (iAT1_IndexOf > 0) + if (sCDS_Source.equals("O")) + { + logIt(fDebug, iDEBUG, false, "Found summary record generated to hold AT1 element in ["+sConcat+"] Source=["+sCDS_Source+"] Skipping record..."); + continue; + } + +// logIt(fDebug, iDEBUG, false, "================================ Source=["+sCDS_Source+"] Type=["+sCDS_Type+"]"); + if (sCDS_Type.equals("SOD ")) + { + iAT1_IndexOf = line.indexOf("AT1"); + iAT2_IndexOf = line.indexOf("AT2"); + iAT3_IndexOf = line.indexOf("AT3"); + iAT4_IndexOf = line.indexOf("AT4"); + iAT5_IndexOf = line.indexOf("AT5"); + iAT6_IndexOf = line.indexOf("AT6"); + iAT7_IndexOf = line.indexOf("AT7"); + iAT8_IndexOf = line.indexOf("AT8"); + + if (iAT1_IndexOf > 0) + { + iATx_Cut = iAT1_IndexOf - iAT1_IndexOf + iATx_Length; + } + if (iAT2_IndexOf > 0) + { + iATx_Cut = iAT2_IndexOf - iAT1_IndexOf + iATx_Length; + } + if (iAT3_IndexOf > 0) + { + iATx_Cut = iAT3_IndexOf - iAT1_IndexOf + iATx_Length; + } + if (iAT4_IndexOf > 0) + { + iATx_Cut = iAT4_IndexOf - iAT1_IndexOf + iATx_Length; + } + if (iAT5_IndexOf > 0) + { + iATx_Cut = iAT5_IndexOf - iAT1_IndexOf + iATx_Length; + } + if (iAT6_IndexOf > 0) + { + iATx_Cut = iAT6_IndexOf - iAT1_IndexOf + iATx_Length; + } + if (iAT7_IndexOf > 0) + { + iATx_Cut = iAT7_IndexOf - iAT1_IndexOf + iATx_Length; + } + if (iAT8_IndexOf > 0) + { + iATx_Cut = iAT8_IndexOf - iAT1_IndexOf + iATx_Length; + } + +// logIt(fDebug, iDEBUG, false, "Found SOD record in ["+sConcat+"] AT1=["+iAT1_IndexOf+"] AT2=["+iAT2_IndexOf+"] AT3=["+iAT3_IndexOf+"] AT4=["+iAT4_IndexOf +// +"] AT5=["+iAT5_IndexOf+"] AT6=["+iAT6_IndexOf+"] AT7=["+iAT7_IndexOf+"] AT8=["+iAT8_IndexOf +// +"] Length=["+iATx_Cut+"]"); + if (iAT1_IndexOf > 0) + { + lineHold = line.substring(0,iAT1_IndexOf)+line.substring(iAT1_IndexOf+iATx_Cut,iLength); + line = lineHold; // Rip out the AT elements and continue processing... + logIt(fDebug, iDEBUG, false, "Removed ATx elements for length of "+iATx_Cut+" characters"); +// logIt(fDebug, iDEBUG, false, "Old line=["+line+"]"); +// logIt(fDebug, iDEBUG, false, "New line=["+lineHold+"]"); + } +// continue; + } + + getMDS(line); // Fields making up the Mandatory Data Section. + getOC1(line); // Fields making up the OC1 element. + getGDx(line); // Fields making up the GDx element. // 03/24/2015 ras + getGF1(line); // Fields making up the GF1 element. + getMW1(line); // Fields making up the MW1 element. + getMW2(line); // Fields making up the MW2 element. + getMW3(line); // Fields making up the MW3 element. + getMW4(line); // Fields making up the MW3 element. // 06/21/2012 ras + getAY1(line); // Fields making up the AY1 element. + getMA1(line); // Fields making up the MA1 element. + sMaxTemp = "***"; + sMinTemp = "***"; + getKA1(line); // Fields making up the KA1 element. + getKA2(line); // Fields making up the KA2 element. + sPcp01 = "*****"; + sPcp01t = " "; + sPcp06 = "*****"; + sPcp06t = " "; + sPcp24 = "*****"; + sPcp24t = " "; + sPcp12 = "*****"; + sPcp12t = " "; + getAA1(line); // Fields making up the AA1 element. + getAA2(line); // Fields making up the AA2 element. + getAA3(line); // Fields making up the AA3 element. + getAA4(line); // Fields making up the AA4 element. + getAJ1(line); // Fields making up the AJ1 element. + getAW1(line); // Fields making up the AW1 element. // 06/06/2012 ras + getAW2(line); // Fields making up the AW2 element. // 06/06/2012 ras + getAW3(line); // Fields making up the AW3 element. // 06/06/2012 ras + getAW4(line); // Fields making up the AW4 element. // 06/06/2012 ras + +// Begin formatting output record.............................................................. + +// Post-processing format changes + if ( sCDS_Wban.equals("99999") ) // Show WBAN=99999 as missing "*****" in output file + { + sCDS_Wban = "*****"; + } +// Build Control Data Section + sControlSection = sCDS_ID+" "+sCDS_Wban+" "+sCDS_Year+sCDS_Month+sCDS_Day+sCDS_Hour+sCDS_Minute; + +// Sort Present Weather elements + sWW1234 = new String[] {sMW1_Ww,sMW2_Ww,sMW3_Ww,sMW4_Ww}; + Arrays.sort(sWW1234); + +// Sort Present Weather (Automated) elements + sAW1234 = new String[] {sAW1_Zz,sAW2_Zz,sAW3_Zz,sAW4_Zz}; + Arrays.sort(sAW1234); + +// Build Mandatory Data Section + the rest of the record + sMandatorySection = sMDS_Dir+" "+sMDS_Spd+" "+sOC1_Gus+" "+sMDS_Clg + +" "+sGF1_Skc+" "+sGF1_Low+" "+sGF1_Med+" "+sGF1_Hi+" "+sMDS_Vsb + +" "+sWW1234[3]+" "+sWW1234[2]+" "+sWW1234[1]+" "+sWW1234[0] + +" "+sAW1234[3]+" "+sAW1234[2]+" "+sAW1234[1]+" "+sAW1234[0]+" "+sAY1_Pw + +" "+sMDS_Temp+" "+sMDS_Dewp+" "+sMDS_Slp+" "+sMA1_Alt+" "+sMA1_Stp + +" "+sMaxTemp+" "+sMinTemp+" "+sPcp01+sPcp01t+sPcp06+sPcp06t+sPcp24+sPcp24t+sPcp12+sPcp12t + +sAJ1_Sd; + + sOutputRecord = sControlSection+" "+sMandatorySection; // Put it all together + fFixedWriter.write(sOutputRecord+"\n"); // Write out the record + + } // while read + + } + catch (IOException ex) { + System.err.println(sProgramName+": IOException 2. Error=[" + ex.getMessage()+"]"); + System.err.println(sProgramName+": Stack trace follows:"); + ex.printStackTrace(); + System.exit(2); + } + + fInReader.close(); + fFixedWriter.flush(); + fFixedWriter.close(); + + } catch (Exception e) { //Catch exception if any + sMessage=sProgramName+": Unspecified Exception 1. Error=[" + e.getMessage()+"]"; + bStdErr=true; + logIt(fDebug, iPROD, false, sMessage); // Append output to log. + System.err.println(sProgramName+": Stack trace follows:"); + e.printStackTrace(); + System.exit(1); + } + + logIt(fDebug, iDEBUG, false, "Processed "+iCounter+" records"); + logIt(fDebug, iDEBUG, false, "Done."); + + } // End of main() + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// formatInt - Right-justifies an int. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static String formatInt(int i, int len) + { + final String blanks = " "; + String s = Integer.toString(i); + if (s.length() < len) + s = blanks.substring(0, len - s.length()) + s; + return s; + } + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// formatFloat - Right-justifies a float. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static String formatFloat(float i, int len) + { + final String blanks = " "; + String s = Float.toString(i); + if (s.length() < len) + s = blanks.substring(0, len - s.length()) + s; + return s; + } + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getCDS - Get CDS section and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getCDS(String p_sRecd) + { + // Extract fields making up the Control Data Section. + sCDS = p_sRecd.substring(0,60); + sCDS_Fill1 = p_sRecd.substring(0,4); + sCDS_ID = p_sRecd.substring(4,10); + sCDS_Wban = p_sRecd.substring(10,15); + sCDS_Year = p_sRecd.substring(15,19); + sCDS_Month = p_sRecd.substring(19,21); + sCDS_Day = p_sRecd.substring(21,23); + sCDS_Hour = p_sRecd.substring(23,25); + sCDS_Minute = p_sRecd.substring(25,27); + sCDS_Source = p_sRecd.substring(27,28); + sCDS_Fill2 = p_sRecd.substring(28,41); + sCDS_Type = p_sRecd.substring(41,45); + sCDS_Fill3 = p_sRecd.substring(45,60); + } // End of getCDS + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getMDS - Get MDS section and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getMDS(String p_sRecd) + { + // Extract fields making up the Mandatory Data Section. + sMDS = p_sRecd.substring(60,105); + sMDS_Dir = p_sRecd.substring(60,63); + sMDS_DirQ = p_sRecd.substring(63,64); + sMDS_DirType = p_sRecd.substring(64,65); + sMDS_Spd = p_sRecd.substring(65,69); + sMDS_Fill2 = p_sRecd.substring(69,70); + sMDS_Clg = p_sRecd.substring(70,75); + sMDS_Fill3 = p_sRecd.substring(75,78); + sMDS_Vsb = p_sRecd.substring(78,84); + sMDS_Fill4 = p_sRecd.substring(84,87); + sMDS_TempSign = p_sRecd.substring(87,88); + sMDS_Temp = p_sRecd.substring(88,92); + sMDS_Fill5 = p_sRecd.substring(92,93); + sMDS_DewpSign = p_sRecd.substring(93,94); + sMDS_Dewp = p_sRecd.substring(94,98); + sMDS_Fill6 = p_sRecd.substring(98,99); + sMDS_Slp = p_sRecd.substring(99,104); + sMDS_Fill7 = p_sRecd.substring(104,105); + + if(sMDS_Dir.equals("999")) + { + sMDS_Dir = "***"; + } + + if(sMDS_DirType.equals("V")) // 06/21/2012 ras + { + sMDS_Dir = "990"; + } + +// logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sMDS_Dir=["+sMDS_Dir+"] sMDS_DirQ=["+sMDS_DirQ+"] sMDS_DirType=["+sMDS_DirType+"]"); // temporary - ras + + if(sMDS_Spd.equals("9999")) + { + sMDS_Spd = "***"; + } + else + { +// System.out.println("sMDS=["+sMDS+"] Spd=["+sMDS_Spd+"]"); + iWork = Integer.parseInt(sMDS_Spd); // Convert to integer +// System.out.println("iWork=["+iWork+"]"); + iWork = (int)(((float)iWork / 10.0) * 2.237 + .5); // Convert Meters Per Second to Miles Per Hour +// System.out.println("iWork=["+iWork+"]"); +// sMDS_Spd = fmt3.format(iWork); + sMDS_Spd = formatInt(iWork,3); +// System.out.println("Spd=["+sMDS_Spd+"]"); +// logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sMDS_Spd=["+sMDS_Spd+"]"); // temporary - ras + } + + if(sMDS_Clg.equals("99999")) + { + sMDS_Clg = "***"; + } + else + { + try + { + iWork = Integer.parseInt(sMDS_Clg); // Convert to integer + } + catch (Exception e) + { + logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sMDS_Clg value could not be converted to integer=["+sMDS_Clg+"]"); + sMDS_Clg = "***"; // Data error. Set to missing. + } + if( ! sMDS_Clg.equals("***") ) + { + iWork = (int)(((float)iWork * 3.281) / 100.0 + .5); // Convert Meters to Hundreds of Feet + sMDS_Clg = formatInt(iWork,3); +// logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sMDS_Clg=["+sMDS_Clg+"]"); // temporary - ras + } + } + + if(sMDS_Vsb.equals("999999")) + { + sMDS_Vsb = "****"; + } + else + { + fWork = Float.parseFloat(sMDS_Vsb); // Convert to floating point + fWork = ((float)(fWork * (float) 0.000625)); // Convert Meters to Miles using CDO's value +// fWork = ((float)(fWork * (float) 0.000621371192237334)); // Convert Meters to Miles + fWorkSave = fWork; // Save this value for possible display + if (fWork > 99.9) + { + fWork = (float)99.0; // Set to value that will fit + } + + if (fWork == (float)10.058125) // Match CDO 2011-04-28 ras + { + logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sMDS_Vsb value rounded to 10 miles"); + fWork = (float)10.0; + } + sMDS_Vsb = fmt4_1.format(fWork); + sMDS_Vsb = String.format("%4s",sMDS_Vsb); + } + + if(sMDS_Temp.equals("9999")) + { + sMDS_Temp = "****"; + } + else + { +// System.out.println(sMDS_Temp); + iWork = Integer.parseInt(sMDS_Temp); // Convert to integer + if (sMDS_TempSign.equals("-")) + { + iWork*=-1; + } + if(iWork < -178) + { + iWork = (int)(((float)iWork / 10.0) * 1.8 + 32.0 - .5); // Handle temps below 0F + } + else + { + iWork = (int)(((float)iWork / 10.0) * 1.8 + 32.0 + .5); + } + sMDS_Temp = formatInt(iWork,4); +// System.out.println(sMDS_Temp); + } + + if(sMDS_Dewp.equals("9999")) + { + sMDS_Dewp = "****"; + } + else + { +// System.out.println(sMDS_Dewp); + iWork = Integer.parseInt(sMDS_Dewp); // Convert to integer + if (sMDS_DewpSign.equals("-")) + { + iWork*=-1; + } + if(iWork < -178) + { + iWork = (int)(((float)iWork / 10.0) * 1.8 + 32.0 - .5); // Handle temps below 0F + } + else + { + iWork = (int)(((float)iWork / 10.0) * 1.8 + 32.0 + .5); + } + sMDS_Dewp = formatInt(iWork,4); +// System.out.println(sMDS_Dewp); + } + + if(sMDS_Slp.equals("99999")) + { + sMDS_Slp = "******"; + } + else + { + fWork = Float.parseFloat(sMDS_Slp); // Convert to floating point + fWork = ((float)(fWork / 10.0)); // Convert convert Hectopascals to Millibars + sMDS_Slp = fmt6_1.format(fWork); + sMDS_Slp = String.format("%6s",sMDS_Slp); + } + } // End of getMDS + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getGDx - Get highest GDx element (can be 1 thru 6) and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getGDx(String p_sRecd) + { + int iGDx_Looper = 6; + sGDx = ""; + sGDx_Cov1 = ""; + sGDx_Cov2 = ""; + iGDx_IndexOf = 0; + sGDx_Skc = "***"; + + while ( iGDx_Looper > 0 ) + { + iGDx_IndexOf = p_sRecd.indexOf("GD"+Integer.toString(iGDx_Looper)); + + if ( (iGDx_IndexOf >= 0) && (iGDx_IndexOf < iREM_IndexOf) ) + { +// logIt(fDebug, iDEBUG, false, "GD"+Integer.toString(iGDx_Looper)+" found."); + iGDx_Looper = -1; + continue; + } + iGDx_Looper--; + } + + if ( (iGDx_IndexOf >= 0) && (iGDx_IndexOf < iREM_IndexOf) ) + { + sGDx = p_sRecd.substring(iGDx_IndexOf,iGDx_IndexOf+iGDx_Length); + sGDx_Cov1 = sGDx.substring(3,4); + sGDx_Cov2 = sGDx.substring(4,6); + + try + { + iWork = Integer.parseInt(sGDx_Cov1); // Convert to integer + } + catch (Exception e) + { + logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sGDx_Cov1 value could not be converted to integer=["+sGDx_Cov1+"]"); + iWork = 999; + sGDx_Skc = "***"; // Data error. Set to missing. + } + + if( iWork < 9 ) + { + switch (iWork) + { + case 0: sGDx_Skc = "CLR"; + break; + case 1: sGDx_Skc = "FEW"; + break; + case 2: sGDx_Skc = "SCT"; + break; + case 3: sGDx_Skc = "BKN"; + break; + case 4: sGDx_Skc = "OVC"; + break; + case 5: sGDx_Skc = "OBS"; + break; + case 6: sGDx_Skc = "POB"; + break; + default: sGDx_Skc = "***"; + break; + } + } + else + { + try + { + iWork = Integer.parseInt(sGDx_Cov2); // Convert to integer + } + catch (Exception e) + { + logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sGDx_Cov2 value could not be converted to integer=["+sGDx_Cov2+"]"); + iWork = 999; + sGDx_Skc = "***"; // Data error. Set to missing. + } + + switch (iWork) + { + case 0: sGDx_Skc = "CLR"; + break; + case 1: + case 2: sGDx_Skc = "FEW"; + break; + case 3: + case 4: + case 11: + case 12: + case 13: sGDx_Skc = "SCT"; + break; + case 5: + case 6: + case 7: + case 14: + case 15: + case 16: sGDx_Skc = "BKN"; + break; + case 8: + case 17: + case 18: + case 19: sGDx_Skc = "OVC"; + break; + case 9: + case 10: sGDx_Skc = "POB"; + break; + default: sGDx_Skc = "***"; + break; + } + + } + } + + } // End of getGDx + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getOC1 - Get OC1 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getOC1(String p_sRecd) + { + sOC1 = ""; + sOC1_Fill1 = ""; + sOC1_Gus = "***"; + sOC1_Fill2 = ""; + iOC1_IndexOf = p_sRecd.indexOf("OC1"); + if ( (iOC1_IndexOf >= 0) && (iOC1_IndexOf < iREM_IndexOf) ) + { + sOC1 = p_sRecd.substring(iOC1_IndexOf,iOC1_IndexOf+iOC1_Length); + sOC1_Fill1 = sOC1.substring(1,3); // 3 + sOC1_Gus = sOC1.substring(3,7); // 4 + sOC1_Fill2 = sOC1.substring(7,8); // 1 + + if(sOC1_Gus.equals("9999")) // 06/06/2012 ras + { + sOC1_Gus = "***"; +// logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sOC1_Gus missing=["+sOC1_Gus+"]"); // temporary - ras + } + else + { + try + { + iWork = Integer.parseInt(sOC1_Gus); // Convert to integer + } + catch (Exception e) + { + logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sOC1_Gus value could not be converted to integer=["+sOC1_Gus+"]"); + sOC1_Gus = "***"; // Data error. Set to missing. + } + if( ! sOC1_Gus.equals("***") ) + { + iWork = (int)(((float)iWork / 10.0) * 2.237 + .5); // Convert Meters Per Second to Miles Per Hour + sOC1_Gus = formatInt(iWork,3); +// logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sOC1_Gus=["+sOC1_Gus+"]"); // temporary - ras + } + } + } + } // End of getOC1 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getGF1 - Get GF1 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getGF1(String p_sRecd) + { + sGF1 = ""; + sGF1_Fill1 = ""; + sGF1_Skc = "***"; + sGF1_Fill2 = ""; + sGF1_Low = "*"; + sGF1_Fill3 = ""; + sGF1_Med = "*"; + sGF1_Fill4 = ""; + sGF1_Hi = "*"; + sGF1_Fill5 = ""; + iGF1_IndexOf = p_sRecd.indexOf("GF1"); + if ( (iGF1_IndexOf >= 0) && (iGF1_IndexOf < iREM_IndexOf) ) + { + sGF1 = p_sRecd.substring(iGF1_IndexOf,iGF1_IndexOf+iGF1_Length); + sGF1_Fill1 = sGF1.substring(1,3); + sGF1_Skc = sGF1.substring(3,5); + sGF1_Fill2 = sGF1.substring(5,11); + sGF1_Low = sGF1.substring(11,13); + sGF1_Fill3 = sGF1.substring(13,20); + sGF1_Med = sGF1.substring(20,22); + sGF1_Fill4 = sGF1.substring(22,23); + sGF1_Hi = sGF1.substring(23,25); + sGF1_Fill5 = sGF1.substring(25,26); + } + else // Use GDx info when GF1 is missing // 03/24/2015 ras + { + if ( iGDx_IndexOf > 0 ) + { + logIt(fDebug, iDEBUG, false, "GDx found. Using GDx in place of GF1 info."); + sGF1_Skc = sGDx_Skc; + sGF1_Low = "*"; + sGF1_Med = "*"; + sGF1_Hi = "*"; + } + } + + if ( (iGF1_IndexOf >= 0) && (iGF1_IndexOf < iREM_IndexOf) ) + { + if(sGF1_Skc.equals("99")) + { + sGF1_Skc = "***"; + } + else + { +// System.out.println("DateTime=["+sConcat+"] GF1=["+sGF1+"] Skc=["+sGF1_Skc+"]"); + try + { + iWork = Integer.parseInt(sGF1_Skc); // Convert to integer + } + catch (Exception e) + { + logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sGF1_Skc value could not be converted to integer=["+sGF1_Skc+"]"); + sGF1_Skc = "***"; // Data error. Set to missing. + } + if( ! sGF1_Skc.equals("***") ) + { + if(iWork == 0) { sGF1_Skc = "CLR"; } + else { if((iWork >= 1) && (iWork <= 4)) { sGF1_Skc = "SCT"; } + else { if((iWork >= 5) && (iWork <= 7)) { sGF1_Skc = "BKN"; } + else { if(iWork == 8) { sGF1_Skc = "OVC"; } + else { if(iWork == 9) { sGF1_Skc = "OBS"; } + else { if(iWork == 10) { sGF1_Skc = "POB"; }}}}}} + } + } + if(sGF1_Low.equals("99")) // Low cloud type + { + sGF1_Low = "*"; + } + else + { + sGF1_Low = sGF1_Low.substring(1,2); + } + + if(sGF1_Med.equals("99")) // Med cloud type + { + sGF1_Med = "*"; + } + else + { + sGF1_Med = sGF1_Med.substring(1,2); + } + + if(sGF1_Hi.equals("99")) // High cloud type + { + sGF1_Hi = "*"; + } + else + { + sGF1_Hi = sGF1_Hi.substring(1,2); + } + } + } // End of getGF1 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getMW1 - Get MW1 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getMW1(String p_sRecd) + { + sMW1 = ""; + sMW1_Fill1 = ""; + sMW1_Ww = "**"; + sMW1_Fill2 = ""; + iMW1_IndexOf = p_sRecd.indexOf("MW1"); + if ( (iMW1_IndexOf >= 0) && (iMW1_IndexOf < iREM_IndexOf) ) + { + sMW1 = p_sRecd.substring(iMW1_IndexOf,iMW1_IndexOf+iMW1_Length); + sMW1_Fill1 = sMW1.substring(1,3); // 3 + sMW1_Ww = sMW1.substring(3,5); // 2 + sMW1_Fill2 = sMW1.substring(5,6); // 1 +// System.out.println("MW1=["+sMW1+"] Ww=["+sMW1_Ww+"]"); + } + } // End of getMW1 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getMW2 - Get MW2 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getMW2(String p_sRecd) + { + sMW2 = ""; + sMW2_Fill1 = ""; + sMW2_Ww = "**"; + sMW2_Fill2 = ""; + iMW2_IndexOf = p_sRecd.indexOf("MW2"); + if ( (iMW2_IndexOf >= 0) && (iMW2_IndexOf < iREM_IndexOf) ) + { + sMW2 = p_sRecd.substring(iMW2_IndexOf,iMW2_IndexOf+iMW2_Length); + sMW2_Fill1 = sMW2.substring(1,3); // 3 + sMW2_Ww = sMW2.substring(3,5); // 2 + sMW2_Fill2 = sMW2.substring(5,6); // 1 +// System.out.println("MW2=["+sMW2+"] Ww=["+sMW2_Ww+"]"); + } + } // End of getMW2 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getMW3 - Get MW3 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getMW3(String p_sRecd) + { + sMW3 = ""; + sMW3_Fill1 = ""; + sMW3_Ww = "**"; + sMW3_Fill2 = ""; + iMW3_IndexOf = p_sRecd.indexOf("MW3"); + if ( (iMW3_IndexOf >= 0) && (iMW3_IndexOf < iREM_IndexOf) ) + { + sMW3 = p_sRecd.substring(iMW3_IndexOf,iMW3_IndexOf+iMW3_Length); + sMW3_Fill1 = sMW3.substring(1,3); // 3 + sMW3_Ww = sMW3.substring(3,5); // 2 + sMW3_Fill2 = sMW3.substring(5,6); // 1 +// System.out.println("MW3=["+sMW3+"] Ww=["+sMW3_Ww+"]"); + } + } // End of getMW3 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getMW4 - Get MW4 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getMW4(String p_sRecd) + { + sMW4 = ""; + sMW4_Fill1 = ""; + sMW4_Ww = "**"; + sMW4_Fill2 = ""; + iMW4_IndexOf = p_sRecd.indexOf("MW4"); + if ( (iMW4_IndexOf >= 0) && (iMW4_IndexOf < iREM_IndexOf) ) + { + sMW4 = p_sRecd.substring(iMW4_IndexOf,iMW4_IndexOf+iMW4_Length); + sMW4_Fill1 = sMW4.substring(1,3); // 3 + sMW4_Ww = sMW4.substring(3,5); // 2 + sMW4_Fill2 = sMW4.substring(5,6); // 1 +// logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sMW4_Ww=["+sMW4_Ww+"]"); // temporary - ras + } + } // End of getMW4 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getAY1 - Get AY1 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getAY1(String p_sRecd) + { + sAY1 = ""; + sAY1_Fill1 = ""; + sAY1_Pw = "*"; + sAY1_Fill2 = ""; + iAY1_IndexOf = p_sRecd.indexOf("AY1"); + if ( (iAY1_IndexOf >= 0) && (iAY1_IndexOf < iREM_IndexOf) ) + { + sAY1 = p_sRecd.substring(iAY1_IndexOf,iAY1_IndexOf+iAY1_Length); + sAY1_Fill1 = sAY1.substring(1,3); // 3 + sAY1_Pw = sAY1.substring(3,4); // 1 + sAY1_Fill2 = sAY1.substring(4,8); // 4 +// System.out.println("AY1=["+sAY1+"] Pw=["+sAY1_Pw+"]"); + } + } // End of getAY1 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getMA1 - Get MA1 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getMA1(String p_sRecd) + { + sMA1 = ""; + sMA1_Fill1 = ""; + sMA1_Alt = "*****"; + sMA1_Fill2 = ""; + sMA1_Stp = "******"; + sMA1_Fill3 = ""; + iMA1_IndexOf = p_sRecd.indexOf("MA1"); + if ( (iMA1_IndexOf >= 0) && (iMA1_IndexOf < iREM_IndexOf) ) + { + sMA1 = p_sRecd.substring(iMA1_IndexOf,iMA1_IndexOf+iMA1_Length); + sMA1_Fill1 = sMA1.substring(1,3); // 3 + sMA1_Alt = sMA1.substring(3,8); // 5 + sMA1_Fill2 = sMA1.substring(8,9); // 1 + sMA1_Stp = sMA1.substring(9,14); // 5 + sMA1_Fill3 = sMA1.substring(14,15); // 1 + + if(sMA1_Alt.equals("99999")) + { + sMA1_Alt = "*****"; + } + else + { + try + { + fWork = Float.parseFloat(sMA1_Alt); // Convert to floating point + } + catch (Exception e) + { + logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sMA1_Alt value could not be converted to floating point=["+sMA1_Alt+"]"); + sMA1_Alt = "*****"; // Data error. Set to missing. + } + if( ! sMA1_Alt.equals("*****") ) + { + fWork = ((float)((fWork / 10.0)*100.0) / (float) 3386.39); // Convert Hectopascals to Inches + sMA1_Alt = fmt5_2.format(fWork); + sMA1_Alt = String.format("%5s",sMA1_Alt); + } + } + if(sMA1_Stp.equals("99999")) + { + sMA1_Stp = "******"; + } + else + { + try + { + fWork = Float.parseFloat(sMA1_Stp); // Convert to floating point + } + catch (Exception e) + { + logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sMA1_Stp value could not be converted to floating point=["+sMA1_Stp+"]"); + sMA1_Stp = "******"; // Data error. Set to missing. + } + if( ! sMA1_Stp.equals("******") ) + { + fWork = ((float)(fWork / 10.0)); // Convert convert Hectopascals to Millibars + sMA1_Stp = fmt6_1.format(fWork); + sMA1_Stp = String.format("%6s",sMA1_Stp); + } + } + } + } // End of getMA1 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getKA1 - Get KA1 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getKA1(String p_sRecd) + { + sKA1 = ""; + sKA1_Fill1 = ""; + sKA1_Code = "*"; + sKA1_Temp = "***"; + sKA1_Fill2 = ""; + iKA1_IndexOf = p_sRecd.indexOf("KA1"); + if ( (iKA1_IndexOf >= 0) && (iKA1_IndexOf < iREM_IndexOf) ) + { + sKA1 = p_sRecd.substring(iKA1_IndexOf,iKA1_IndexOf+iKA1_Length); + sKA1_Fill1 = sKA1.substring(1,6); // 6 + sKA1_Code = sKA1.substring(6,7); // 1 + sKA1_Temp = sKA1.substring(7,12); // 5 + sKA1_Fill2 = sKA1.substring(12,13); // 1 +// System.out.println("KA1=["+sKA1+"] Code=["+sKA1_Code+"] Temp=["+sKA1_Temp+"]"); + if(sKA1_Temp.equals("+9999")) + { + sKA1_Temp = "***"; + } + else + { + try + { + fWork = Float.parseFloat(sKA1_Temp); // Convert to floating point + } + catch (Exception e) + { + logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sKA1_Temp value could not be converted to floating point=["+sKA1_Temp+"]"); + sKA1_Temp = "***"; // Data error. Set to missing. + } + if( ! sKA1_Temp.equals("***") ) + { + if(fWork < -178) + { + fWork = (int)(((float)fWork / 10.0) * 1.8 + 32.0 - .5); // Handle temps below 0F + } + else + { + fWork = (int)(((float)fWork / 10.0) * 1.8 + 32.0 + .5); + } + if(sKA1_Code.equals("N")) + { + sMinTemp = formatInt( (int) fWork,3); + } + else + { + if(sKA1_Code.equals("M")) + { + sMaxTemp = formatInt( (int) fWork,3); + } + } + } + } + } + } // End of getKA1 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getKA2 - Get KA2 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getKA2(String p_sRecd) + { + sKA2 = ""; + sKA2_Fill1 = ""; + sKA2_Code = "*"; + sKA2_Temp = "***"; + sKA2_Fill2 = ""; + iKA2_IndexOf = p_sRecd.indexOf("KA2"); + if ( (iKA2_IndexOf >= 0) && (iKA2_IndexOf < iREM_IndexOf) ) + { + sKA2 = p_sRecd.substring(iKA2_IndexOf,iKA2_IndexOf+iKA2_Length); + sKA2_Fill1 = sKA2.substring(1,6); // 6 + sKA2_Code = sKA2.substring(6,7); // 1 + sKA2_Temp = sKA2.substring(7,12); // 5 + sKA2_Fill2 = sKA2.substring(12,13); // 1 +// System.out.println("KA2=["+sKA2+"] Code=["+sKA2_Code+"] Temp=["+sKA2_Temp+"]"); + if(sKA2_Temp.equals("+9999")) + { + sKA2_Temp = "***"; + } + else + { + try + { + fWork = Float.parseFloat(sKA2_Temp); // Convert to floating point + } + catch (Exception e) + { + logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sKA2_Temp value could not be converted to floating point=["+sKA2_Temp+"]"); + sKA2_Temp = "***"; // Data error. Set to missing. + } + if( ! sKA2_Temp.equals("***") ) + { + if(fWork < -178) + { + fWork = (int)(((float)fWork / 10.0) * 1.8 + 32.0 - .5); // Handle temps below 0F + } + else + { + fWork = (int)(((float)fWork / 10.0) * 1.8 + 32.0 + .5); + } + if(sKA2_Code.equals("N")) + { + sMinTemp = formatInt( (int) fWork,3); + } + else + { + if(sKA2_Code.equals("M")) + { + sMaxTemp = formatInt( (int) fWork,3); + } + } + } + } + } + } // End of getKA2 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getAA1 - Get AA1 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getAA1(String p_sRecd) + { + sAA1 = ""; + sAA1_Fill1 = ""; + sAA1_Hours = ""; + sAA1_Pcp = ""; + sAA1_Trace = ""; + sAA1_Fill2 = ""; + iAA1_IndexOf = p_sRecd.indexOf("AA1"); + if ( (iAA1_IndexOf >= 0) && (iAA1_IndexOf < iREM_IndexOf) ) + { + sAA1 = p_sRecd.substring(iAA1_IndexOf,iAA1_IndexOf+iAA1_Length); + sAA1_Fill1 = sAA1.substring(1,3); // 3 + sAA1_Hours = sAA1.substring(3,5); // 2 + sAA1_Pcp = sAA1.substring(5,9); // 4 + sAA1_Trace = sAA1.substring(9,10); // 1 + sAA1_Fill2 = sAA1.substring(10,11); // 1 +// System.out.println("AA1=["+sAA1+"] Pcp=["+sAA1_Pcp+"]"); + if( sAA1_Pcp.equals("9999") ) + { + sAA1_Pcp = "*****"; + } + else + { + try + { + fWork = Float.parseFloat(sAA1_Pcp); // Convert to floating point + } + catch (Exception e) + { + logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] AA1_Pcp value could not be converted to floating point=["+sAA1_Pcp+"]"); + sAA1_Pcp = "*****"; // Data error. Set to missing. + } + if( ! sAA1_Pcp.equals("*****") ) + { + setPcp(sAA1_Hours,sAA1_Trace); + } + } + } + } // End of getAA1 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getAA2 - Get AA2 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getAA2(String p_sRecd) + { + sAA2 = ""; + sAA2_Fill1 = ""; + sAA2_Hours = ""; + sAA2_Pcp = ""; + sAA2_Trace = ""; + sAA2_Fill2 = ""; + iAA2_IndexOf = p_sRecd.indexOf("AA2"); + if ( (iAA2_IndexOf >= 0) && (iAA2_IndexOf < iREM_IndexOf) ) + { +// System.out.println("DateTime=["+sConcat+"] iAA2_IndexOf=["+iAA2_IndexOf+"] iAA2_Length=["+iAA2_Length+"] Line Length=["+iLength+"]"); + sAA2 = p_sRecd.substring(iAA2_IndexOf,iAA2_IndexOf+iAA2_Length); + sAA2_Fill1 = sAA2.substring(1,3); // 3 + sAA2_Hours = sAA2.substring(3,5); // 2 + sAA2_Pcp = sAA2.substring(5,9); // 4 + sAA2_Trace = sAA2.substring(9,10); // 1 + sAA2_Fill2 = sAA2.substring(10,11); // 1 +// System.out.println("AA2=["+sAA2+"] Pcp=["+sAA2_Pcp+"]"); + if( sAA2_Pcp.equals("9999") ) + { + sAA2_Pcp = "*****"; + } + else + { + try + { + fWork = Float.parseFloat(sAA2_Pcp); // Convert to floating point + } + catch (Exception e) + { + logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] AA2_Pcp value could not be converted to floating point=["+sAA2_Pcp+"]"); + sAA2_Pcp = "*****"; // Data error. Set to missing. + } + if( ! sAA2_Pcp.equals("*****") ) + { + setPcp(sAA2_Hours,sAA2_Trace); + } + } + } + } // End of getAA2 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getAA3 - Get AA3 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getAA3(String p_sRecd) + { + sAA3 = ""; + sAA3_Fill1 = ""; + sAA3_Hours = ""; + sAA3_Pcp = ""; + sAA3_Trace = ""; + sAA3_Fill2 = ""; + iAA3_IndexOf = p_sRecd.indexOf("AA3"); + if ( (iAA3_IndexOf >= 0) && (iAA3_IndexOf < iREM_IndexOf) ) + { +// System.out.println("DateTime=["+sConcat+"] iAA3_IndexOf=["+iAA3_IndexOf+"] iAA3_Length=["+iAA3_Length+"] Line Length=["+iLength+"]"); + sAA3 = p_sRecd.substring(iAA3_IndexOf,iAA3_IndexOf+iAA3_Length); + sAA3_Fill1 = sAA3.substring(1,3); // 3 + sAA3_Hours = sAA3.substring(3,5); // 2 + sAA3_Pcp = sAA3.substring(5,9); // 4 + sAA3_Trace = sAA3.substring(9,10); // 1 + sAA3_Fill2 = sAA3.substring(10,11); // 1 +// System.out.println("AA3=["+sAA3+"] Pcp=["+sAA3_Pcp+"]"); + if( sAA3_Pcp.equals("9999") ) + { + sAA3_Pcp = "*****"; + } + else + { + try + { + fWork = Float.parseFloat(sAA3_Pcp); // Convert to floating point + } + catch (Exception e) + { + logIt(fDebug, iPROD, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] AA3_Pcp value could not be converted to floating point=["+sAA3_Pcp+"]"); + sAA3_Pcp = "*****"; // Data error. Set to missing. + } + if( ! sAA3_Pcp.equals("*****") ) + { + setPcp(sAA3_Hours,sAA3_Trace); + } + } + } + } // End of getAA3 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getAA4 - Get AA4 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getAA4(String p_sRecd) + { + sAA4 = ""; + sAA4_Fill1 = ""; + sAA4_Hours = ""; + sAA4_Pcp = ""; + sAA4_Trace = ""; + sAA4_Fill2 = ""; + iAA4_IndexOf = p_sRecd.indexOf("AA4"); + if ( (iAA4_IndexOf >= 0) && (iAA4_IndexOf < iREM_IndexOf) ) + { +// System.out.println("DateTime=["+sConcat+"] iAA4_IndexOf=["+iAA4_IndexOf+"] iAA4_Length=["+iAA4_Length+"] Line Length=["+iLength+"]"); + sAA4 = p_sRecd.substring(iAA4_IndexOf,iAA4_IndexOf+iAA4_Length); + sAA4_Fill1 = sAA4.substring(1,3); // 3 + sAA4_Hours = sAA4.substring(3,5); // 2 + sAA4_Pcp = sAA4.substring(5,9); // 4 + sAA4_Trace = sAA4.substring(9,10); // 1 + sAA4_Fill2 = sAA4.substring(10,11); // 1 +// System.out.println("AA4=["+sAA4+"] Pcp=["+sAA4_Pcp+"]"); + if( sAA4_Pcp.equals("9999") ) + { + sAA4_Pcp = "*****"; + } + else + { + try + { + fWork = Float.parseFloat(sAA4_Pcp); // Convert to floating point + } + catch (Exception e) + { + logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] AA4_Pcp value could not be converted to floating point=["+sAA4_Pcp+"]"); + sAA4_Pcp = "*****"; // Data error. Set to missing. + } + if( ! sAA4_Pcp.equals("*****") ) + { + setPcp(sAA4_Hours,sAA4_Trace); + } + } + } + } // End of getAA4 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// setPcp - Take AA elements and set Precip values. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void setPcp(String p_sHours, String p_sTrace) + { + fWork = (fWork / (float) 10.0) * (float) .03937008; // Convert precip depths from Millimeters to Inches + if( p_sHours.equals("01") ) + { + sPcp01 = fmt5_2.format(fWork); + sPcp01 = String.format("%5s",sPcp01); + if( p_sTrace.equals("2") ) + { + sPcp01t = "T"; + } + } + else + { + if( p_sHours.equals("06") ) + { + sPcp06 = fmt5_2.format(fWork); + sPcp06 = String.format("%5s",sPcp06); + if( p_sTrace.equals("2") ) + { + sPcp06t = "T"; + } + } + else + { + if( p_sHours.equals("24") ) + { + sPcp24 = fmt5_2.format(fWork); + sPcp24 = String.format("%5s",sPcp24); + if( p_sTrace.equals("2") ) + { + sPcp24t = "T"; + } + } + else + { + sPcp12 = fmt5_2.format(fWork); + sPcp12 = String.format("%5s",sPcp12); + if( p_sTrace.equals("2") ) + { + sPcp12t = "T"; + } + } + } + } + } // End of setPcp + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getAJ1 - Get AJ1 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getAJ1(String p_sRecd) + { + sAJ1 = ""; + sAJ1_Fill1 = ""; + sAJ1_Sd = "**"; + sAJ1_Fill2 = ""; + iAJ1_IndexOf = p_sRecd.indexOf("AJ1"); + if ( (iAJ1_IndexOf >= 0) && (iAJ1_IndexOf < iREM_IndexOf) ) + { + sAJ1 = p_sRecd.substring(iAJ1_IndexOf,iAJ1_IndexOf+iAJ1_Length); + sAJ1_Fill1 = sAJ1.substring(1,3); // 3 + sAJ1_Sd = sAJ1.substring(3,7); // 4 + sAJ1_Fill2 = sAJ1.substring(7,17); // 10 +// System.out.println("AJ1_Fill1=["+sAJ1_Fill1+"] Sd=["+sAJ1_Sd+"]"); + if( sAJ1_Sd.equals("9999") ) + { + sAJ1_Sd = "**"; + } + else + { + try + { + fWork = Float.parseFloat(sAJ1_Sd); // Convert to floating point + } + catch (Exception e) + { + logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sAJ1_Sd value could not be converted to floating point=["+sAJ1_Sd+"]"); + sAJ1_Sd = "**"; // Data error. Set to missing. + } + if( ! sAJ1_Sd.equals("**") ) + { + iWork = (int) (fWork * (float) .3937008 + .5); // Convert precip depths from Millimeters to Inches + sAJ1_Sd = fmt02.format(iWork); + sAJ1_Sd = String.format("%2s",sAJ1_Sd); + } + } + } + } // End of getAJ1 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getAW1 - Get AW1 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getAW1(String p_sRecd) + { + sAW1 = ""; + sAW1_Fill1 = ""; + sAW1_Zz = "**"; + sAW1_Fill2 = ""; + iAW1_IndexOf = p_sRecd.indexOf("AW1"); + if ( (iAW1_IndexOf >= 0) && (iAW1_IndexOf < iREM_IndexOf) ) + { + sAW1 = p_sRecd.substring(iAW1_IndexOf,iAW1_IndexOf+iAW1_Length); + sAW1_Fill1 = sAW1.substring(1,3); // 3 + sAW1_Zz = sAW1.substring(3,5); // 2 + sAW1_Fill2 = sAW1.substring(5,6); // 1 +// logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sAW1_Zz=["+sAW1_Zz+"]"); // temporary - ras + } + } // End of getAW1 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getAW2 - Get AW2 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getAW2(String p_sRecd) + { + sAW2 = ""; + sAW2_Fill1 = ""; + sAW2_Zz = "**"; + sAW2_Fill2 = ""; + iAW2_IndexOf = p_sRecd.indexOf("AW2"); + if ( (iAW2_IndexOf >= 0) && (iAW2_IndexOf < iREM_IndexOf) ) + { + sAW2 = p_sRecd.substring(iAW2_IndexOf,iAW2_IndexOf+iAW2_Length); + sAW2_Fill1 = sAW2.substring(1,3); // 3 + sAW2_Zz = sAW2.substring(3,5); // 2 + sAW2_Fill2 = sAW2.substring(5,6); // 1 +// logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sAW2_Zz=["+sAW2_Zz+"]"); // temporary - ras + } + } // End of getAW2 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getAW3 - Get AW3 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getAW3(String p_sRecd) + { + sAW3 = ""; + sAW3_Fill1 = ""; + sAW3_Zz = "**"; + sAW3_Fill2 = ""; + iAW3_IndexOf = p_sRecd.indexOf("AW3"); + if ( (iAW3_IndexOf >= 0) && (iAW3_IndexOf < iREM_IndexOf) ) + { + sAW3 = p_sRecd.substring(iAW3_IndexOf,iAW3_IndexOf+iAW3_Length); + sAW3_Fill1 = sAW3.substring(1,3); // 3 + sAW3_Zz = sAW3.substring(3,5); // 2 + sAW3_Fill2 = sAW3.substring(5,6); // 1 +// logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sAW3_Zz=["+sAW3_Zz+"]"); // temporary - ras + } + } // End of getAW3 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// getAW4 - Get AW4 element and format its output. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static void getAW4(String p_sRecd) + { + sAW4 = ""; + sAW4_Fill1 = ""; + sAW4_Zz = "**"; + sAW4_Fill2 = ""; + iAW4_IndexOf = p_sRecd.indexOf("AW4"); + if ( (iAW4_IndexOf >= 0) && (iAW4_IndexOf < iREM_IndexOf) ) + { + sAW4 = p_sRecd.substring(iAW4_IndexOf,iAW4_IndexOf+iAW4_Length); + sAW4_Fill1 = sAW4.substring(1,3); // 3 + sAW4_Zz = sAW4.substring(3,5); // 2 + sAW4_Fill2 = sAW4.substring(5,6); // 1 +// logIt(fDebug, iDEBUG, false, "sInFileName=["+sInFileName+"] DateTime=["+sConcat+"] sAW4_Zz=["+sAW4_Zz+"]"); // temporary - ras + } + } // End of getAW4 + + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// logIt - Append records to the log file. +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + public static int logIt(FileOutputStream p_fDebug, int p_iLogLevel, boolean p_bFilter, String p_sIn) + { + int iRetCode=99; // Set default return code to something crazy. + String sMessageFormatted=""; + + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date now = new Date(); + sMessageFormatted=sProgramName+": "+format.format(now)+"_"+p_sIn; + + if (bStdErr) + { + System.err.println(sMessageFormatted); // Error mode will echo message to standard error + } + + if (bVerbose) + { + System.out.println(sMessageFormatted); // Verbose mode will echo message to screen + } + + if (iLogLevel < p_iLogLevel) // 04/01/2009 ras + { + return 0; // No logging for this + } + + if (p_bFilter) // 04/01/2009 ras + { + if (p_sFilter1.equals("None")) // 04/01/2009 ras + { + } + else + { + if (sConcat.equals(p_sFilter1) || // 04/01/2009 ras // Life is good + sConcat.equals(p_sFilter2)) + { + } + else + { + return 0; // 04/01/2009 ras // No logging for this + } + } + } + + try { + p_fDebug = new FileOutputStream (sDebugName+".debug", true); // Append mode. + new PrintStream(p_fDebug).println (format.format(now)+"_"+p_sIn); // Write output to debug log. + iRetCode=0; // Good. + p_fDebug.close(); + } + catch (IOException e) { + System.out.println("5. Unable to open debug log"); + System.err.println(sProgramName+": Stack trace follows:"); + e.printStackTrace(); + System.exit(5); + } + catch (Exception e) { + iRetCode=6; // An error occurred. + System.err.println(sProgramName+": Unspecified Exception in logIt. Error=[" + e.getMessage()+"]"); + System.err.println(sProgramName+": Stack trace follows:"); + e.printStackTrace(); + System.exit(6); + } + return iRetCode; + } // End of logIt + +} diff --git a/Chapter8/rain_data/noaa_data.py b/Chapter8/rain_data/noaa_data.py new file mode 100644 index 0000000..76cd9c7 --- /dev/null +++ b/Chapter8/rain_data/noaa_data.py @@ -0,0 +1,66 @@ +#本程序下载noaa气象数据,使用网址为国内镜像网站,编辑时间2019.03.14,LJX + +import urllib.request # url request +import os # regular expression +import re # dirs +import requests + + +# 根据网络地址和文件保存地址下载文件 +def download(url, path): + r = requests.get(url) + print(path) + with open(path, "wb") as f: + f.write(r.content) + f.close() + + +url = "https://www1.ncdc.noaa.gov/pub/data/noaa/" # parent url +Station_ID = "580280" # 站点号 +year_start = "1993" # 数据起始时间 +year_end = "2001" +# 时间差,然后根据时间差建立年份数组 +year_sub = int(year_end) - int(year_start) + 1 + +# 建立数据年份数组 +years = [] +for i in range(year_sub): + years.append(str(i + int(year_start)).zfill(4)) + +for i in years: + # file_names.append(Station_ID+"-99999-"+i+".gz") #file_names = [] + # urls.append(url+i+"/"+file_names) #urls = [] + file_name = Station_ID + "-99999-" + i + ".gz" # 文件名 + path = './xuzhou2/' + file_name # 文件存储路径 + url2 = url + i + "/" + file_name # 文件网络地址URL + # 判断网页是否为空 + html = requests.get(url2) + respon = html.status_code + # 网页为空则跳过本次执行,否则下载文件 + if respon == 404: + continue + else: + download(url2, path) # 下载文件 + +''' +XUzHOU + + Period of Record: 1956-08-20 to 2019-03-06 Station ID: 58027099999 + +XUZHOU/ GUANYIN ARPT + + Period of Record: 1973-11-04 to 2003-10-01 Station ID: 58028099999 + +XUZHOU/ GUANYIN ARPT + + Period of Record: 1973-11-04 to 2003-10-01 Station ID: 58028099999 + + + #其它链接 +#https://www.ncdc.noaa.gov/data-access +#https://globalweather.tamu.edu/ +#ftp://ftp.ncdc.noaa.gov/pub/data/noaa #另外一个数据库 + +''' + + diff --git "a/Chapter8/rain_data/\350\257\273\345\217\226\347\253\231\347\274\226\345\217\267.py" "b/Chapter8/rain_data/\350\257\273\345\217\226\347\253\231\347\274\226\345\217\267.py" new file mode 100644 index 0000000..fe37351 --- /dev/null +++ "b/Chapter8/rain_data/\350\257\273\345\217\226\347\253\231\347\274\226\345\217\267.py" @@ -0,0 +1,113 @@ +# -*- coding: UTF-8 -*- +__author__ = 'zy' +__time__ = '2019/4/16 22:40' +import pandas as pd +import os + +def file_name(file_dir): + + for root, dirs, files in os.walk(file_dir): + print(root) # 当前目录路径 + print(dirs) # 当前路径下所有子目录 + print(files) # 当前路径下所有非目录子文件 + + print('---------') + print(files) + return files + +def deal_with_download_file(root_source): + #函数处理一下解压后的数据转换成out文件 + # root_source为解压后数据所在路径 + # path为java代码所在路径以及out文件输出路径 + + file_list = file_name(root_source) + + # 修改当前工作目录 + os.chdir(root_source) + # 查看修改后的工作目录 + retval = os.getcwd() + print(retval) + + cmds = [] + for i in file_list: + try: + print(i) + #判断是否为解压后的原始数据 i = root_source+ '\\' + i + cmds.append('java -classpath . ishJava' + ' ' + i + ' ' + i + '.out') + except: + pass + + for cmd in cmds: + os.system(cmd) + print(cmd) + print('处理一个') + +def filter_time(root_source,start_time,end_time): + #依据时间过滤文件 + #root_source out文件目录 + #start_time,end_time 需要开始结束时间,如201809180000,格式为整数 + rain_data_file_list=file_name(root_source) + contents=[] + for i in rain_data_file_list: + try: + if i.split('.')[1]=='out': + #判断是否是输出文件 + temp_dir=root_source+'\\'+i + for row in open(temp_dir): + print('处理一行') + try: + Time = int(row[13:25]) + if (Time > start_time or Time ==start_time) and Time < end_time:#201809180000 + contents.append(row) + #拿出符合时间筛选的内容 + except ValueError: + pass + except: + pass + + with open('result.txt','w',encoding='utf-8') as f: + for i in contents: + f.write(i) + +def find(root_source,select_station_excel): + # 检索所有待处理的文件 + df = pd.read_excel(select_station_excel) + print(df) + sta = [] + lat = [] + lng = [] + rain_data_file_list=file_name(root_source) + for i in rain_data_file_list: + name = i[0:6] + STATION_ID__num = int(name) + # 检索处理后的数据、筛选想要的站点 + sta.append(STATION_ID__num) + a=df[df.STA_ID == STATION_ID__num].LAT + if a not in lat: + lat.append(a) + b=df[df.STA_ID == STATION_ID__num].LNG + if a not in lat: + lng.append(b) + + for j in range(len(sta)): + print('站' + str(sta[j]) + 'lat' + str(lat[j]) + 'lng' + str(lng[j])) + +if __name__=="__main__": + #root_source=r'C:\Users\hp\Desktop\datadeal\气象数据\原始数据' + # files=file_name(root_source) + root_source=r'C:\Users\hp\Desktop\台风山竹广东示例\原始数据' + #deal_with_download_file(root_source) + + + select_station_excel='筛选工作站.xlsx' + + filter_time(root_source, 201809160000, 201809170000) + #筛选出来我们想要的行列 + + #find(root_source, select_station_excel) + + + + + + diff --git "a/Chapter8/\346\225\260\346\215\256\350\257\264\346\230\216" "b/Chapter8/\346\225\260\346\215\256\350\257\264\346\230\216" new file mode 100644 index 0000000..aefddee --- /dev/null +++ "b/Chapter8/\346\225\260\346\215\256\350\257\264\346\230\216" @@ -0,0 +1,20 @@ +# get_rain_data +论文中气象站数据获得与处理 +http://bbs.06climate.com/forum.php?mod=viewthread&tid=50500 +http://bbs.06climate.com/forum.php?mod=viewthread&tid=50500 +参考资料 +NOAA(美国海洋和大气管理局)提供GHCND(全球历史气候学网络)月度摘要数据库,可以满足全球陆地区域历史月度温度,降水和降雪记录的研究需求。 +GHCND月度摘要数据库数据源自GHCN-Daily数据库,经过质量审查与二次加工制成,主要包含18个气象要素,包括温度(每月平均值和极端值),降水(每月总数,极端值和满足各种数量阈值的天数),降雪,最大雪深等。GHCND月度摘要数据库与它对应的每日数据库一样,包含分布在各大洲的40000多个站点的数十个观测值。 +基于世界气象组织(WMO)第40号决议(Cg-12),世界气象组织(WMO)达成了世界天气监视计划协议,互相交换气象数据,GHCN-Daily数据库提供的数据即基于此计划。WMO成员国可以免费且不受限制的使用或导出数据用于研究,教育和其他非商业活动。 +数据库镜像连接:https://www.ncdc.noaa.gov/pub/data/noaa/。本节以台风山竹期间获取广东省内数据绘制降雨情况为例。点击数据库连接会得到以下文件列表,提供从1901年至今的气象数据,操作步骤如下: + + ![Image text](https://github.com/yemanzhongting/get_rain_data/blob/master/%E5%9B%BE/1.png) + +(1) 在文件列表中找到ish-history.csv文件,文件提供了29726个气象站点,包含站点ID,站点经纬度,站点高程,站点所在城市,站点所在国家(CH代表中国),站点数据起迄时间。根据需求在excel内进行查找,筛选出想要的数据站点。从中筛选出具有2018年9月16日至9月18日数据的38个广东省范围内数据站。 +(2) 点进2018年份文件夹,将筛选后的数据站原始数据下载下来并解压。对解压后的文件进行处理,此时解压出来的文件名称格式如“578660-99999-2018”,579570代表站点ID,99999是统一的命名,2018代表数据年份。此时文件并不能直接使用,官方提供了解析脚本ishJava.java,需要安装JDK环境使用,并在同路径下添加ishJava.class类,cmd下执行命令java -classpath . ishJava 578660-99999-2019 578660-99999-2010.out。这里提供了编写好的脚本,调用deal_with_download_file(root_source)函数即可处理路径下所有文件,输出成.out格式。 + +![Image text2](https://github.com/yemanzhongting/get_rain_data/blob/master/%E5%9B%BE/2.png) + +(3) 此时提供的数据是2018年一整年的数据,依据时间条件进行过滤,调用函数filter_time(root_source, 201809160000, 201809170000)筛选出三天的气象数据,得到筛选后的结果result.txt。 +(4) 依据处理结果进行筛选,Arcgis处理后得到降雨插值图。 +![Image text](https://github.com/yemanzhongting/get_rain_data/blob/master/%E5%9B%BE/3.jpg)