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); }