OpenTemp.WriteSeriesOffsets()

        /// <summary>
        /// Write the series offsets to a data file in CSV format.
        /// </summary>
        /// <returns>0 if successful; -ve for error code</returns>
        protected int WriteSeriesOffsets()
        {
            OpenTemp.WriteLine(string.Format("Writing the series offsets to file '{0}'...", _outputSeriesOffsetsFile));
            // Open the file
            StreamWriter sw;
            try
            {
                sw = new StreamWriter(_outputSeriesOffsetsFile, false);      // Overwrite (do not append)
                OpenTemp.WriteLine("  File opened for writing");
            }
            catch (Exception ex)
            {
                OpenTemp.WriteLine(string.Format("  Exception thrown when opening file:  {0}", ex.ToString()));
                return -1;
            }
            if (sw == null)
            {
                OpenTemp.WriteLine("  Failed to open file (check that it exists and the path is correct)");
                return -2;
            }
            // Write header
            sw.WriteLine("COUNTRY, STATION, SERIES, LATITUDE, FIRST, LAST, OFFSET");

            // Loop over all stations and series
            int nSeries = 0;
            foreach (Station station in _stations.Values)
            {
                foreach (Byte seriesNumber in station.SeriesNumbers)
                {
                    SortedList<DateTime, float?> readings = station.GetReadings(seriesNumber);
                    DateTime firstDate = readings.Keys[0];
                    DateTime lastDate = readings.Keys[readings.Keys.Count - 1];

                    sw.WriteLine(string.Format("{0}, {1}, {2}, {3:F2}, {4:F2}, {5:F2}, {6:F3}",
                        station.Country,
                        station.StationID,
                        seriesNumber,
                        station.Latitude,
                        firstDate.Year + (float)firstDate.Month / 12.0f,
                        lastDate.Year  + (float)lastDate.Month  / 12.0f,
                        station.GetSeriesOffset(seriesNumber)));

                    nSeries++;
                }
            }

            // Done
            sw.Close();

            // Done
            OpenTemp.WriteLine(string.Format("  Writing finished: {0} series written", nSeries));
            return 0;
        }