示例#1
0
        public static int WriteMPollUpdateFile(DataTable tblNew, DataTable tblOld, string outputFilename, out bool mpollPermanentMarkChanged)
        {
            mpollPermanentMarkChanged = false;
            if (tblNew.Rows.Count != tblOld.Rows.Count)
            {
                Logger.WriteLine("Error:  the number of rows in the data has changed. no update file will be written");
                return(0);
            }
            if (tblNew.Columns.Count != tblOld.Columns.Count)
            {
                Logger.WriteLine("Error:  the number of columns in the data has changed. no update file will be written");
                return(0);
            }
            StreamWriter output = new StreamWriter(outputFilename);

            int modifiedCounter = 0;

            // first column is date, other columns are values
            output.WriteLine("cbtt,pc,Year,month,value,flag,oldValue,oldFlag");
            for (int c = 1; c < tblOld.Columns.Count; c += 2)
            {
                string columnName  = tblOld.Columns[c].ColumnName;
                var    parts       = columnName.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                string stationName = parts[0];
                string pcode       = parts[1];

                for (int r = 0; r < tblOld.Rows.Count; r++)
                {
                    double valNew = ReadDouble(tblNew.Rows[r][c]);
                    double valOld = ReadDouble(tblOld.Rows[r][c]);

                    string newFlag = ReadFlag(tblNew.Rows[r][c + 1]);
                    string oldFlag = ReadFlag(tblOld.Rows[r][c + 1]);


                    if (valNew != valOld || newFlag != oldFlag)
                    { // something changed.  write to script.
                        if (HydrometMonthlySeries.IsPermanentMark(oldFlag))
                        {
                            mpollPermanentMarkChanged = true;
                        }

                        DateTime date = (DateTime)tblNew.Rows[r][0];

                        System.Globalization.NumberFormatInfo nf = new System.Globalization.NumberFormatInfo();
                        nf.NumberDecimalDigits = 2;
                        string str = stationName.Trim() + ","
                                     + pcode.Trim() + ","
                                     + date.Year.ToString() + ","
                                     + date.ToString("MMM").ToUpper() + ","
                                     + valNew.ToString("F2") + ","
                                     + newFlag + ","
                                     + valOld + ","
                                     + oldFlag;
                        output.WriteLine(str);
                        modifiedCounter++;
                    }
                }
            }
            output.Close();
            return(modifiedCounter);
        }