OpenTemp.WriteYearlyResults()

        /// <summary>
        /// Write the yearly results to a data file in CSV format.
        /// </summary>
        /// <returns>0 if successful; -ve for error code</returns>
        protected int WriteYearlyResults()
        {
            OpenTemp.WriteLine(string.Format(”Writing the yearly results file ‘{0}’…”, _outputYearlyFile));

            // Open the file
            StreamWriter sw;
            try
            {
                sw = new StreamWriter(_outputYearlyFile, 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.Write(”YEAR,AVG”);
            sw.WriteLine();

            // Calculate yearly averages
            int nMonths = 0;
            SortedList<int, float> yearAverages = new SortedList<int, float>();
            foreach (KeyValuePair<DateTime, float> average in _monthlyAverages)
            {
                if (!yearAverages.ContainsKey(average.Key.Year))
                {
                    yearAverages.Add(average.Key.Year, 0.0f);
                }
                yearAverages[average.Key.Year] += average.Value / 12.0f;
                nMonths++;
            }

            // Write yearly data
            foreach (int year in yearAverages.Keys)
            {
                sw.WriteLine(string.Format(”{0}, {1}”, year, yearAverages[year].ToString(”F2″)));
            }
            // Done
            sw.Close();

            // Done
            OpenTemp.WriteLine(string.Format(”  Writing finished: {0} months written”, nMonths));
            return 0;
        }