Esempio n. 1
0
        /// <summary>PWeatherDataをファイルに書き出す</summary>
        /// <param name="wdTable">WeatherDataTableオブジェクト</param>
        /// <param name="filePath">書き出しファイルへのパス</param>
        /// <param name="success">書き出し成功の真偽</param>
        public static void FromPWeather(WeatherDataTable wdTable, string filePath, out bool success)
        {
            //書き出しストリームを用意
            StreamWriter sWriter = new StreamWriter(filePath);

            //1時間間隔のデータに変更
            WeatherDataTable houlyWDTable = wdTable.ConvertToHoulyDataTable();

            //第一行を記入
            LocationInformation lInfo = wdTable.Location;
            string ss = lInfo.EnglishName + " " +
                lInfo.Latitude.ToString("F2") + " " +
                lInfo.Longitude.ToString("F2") + " " +
                lInfo.LongitudeAtStandardTime.ToString("F2") + " 0 0 0 ";
            while (ss.Length < 80) ss += "-";
            sWriter.WriteLine(ss);

            int cHour = 0;
            ImmutableWeatherRecord[] wrs = new ImmutableWeatherRecord[24];
            for (int i = 0; i < houlyWDTable.WeatherRecordNumber; i++)
            {
                wrs[cHour] = houlyWDTable.GetWeatherRecord(i);
                //24時間分データがたまった場合は書き出し
                if (cHour == 23)
                {
                    if (!output24Data(sWriter, wrs))
                    {
                        //変換失敗の場合
                        sWriter.Close();
                        File.Delete(filePath);
                        success = false;
                        return;
                    }
                    cHour = 0;
                }
                else cHour++;
            }

            sWriter.Close();

            success = true;
        }
Esempio n. 2
0
        /// <summary>24時間分のデータを書き出す</summary>
        /// <param name="sWriter">書き出しストリーム</param>
        /// <param name="wRecord">24時間分のデータ</param>
        private static bool output24Data(StreamWriter sWriter, ImmutableWeatherRecord[] wRecord)
        {
            if (wRecord.Length != 24) throw new Exception();

            //年月日文字列
            DateTime dt = wRecord[0].DataDTime;
            string dTime = dt.Year.ToString().Substring(2);
            dTime += String.Format("{0, 2}", dt.Month.ToString());
            dTime += String.Format("{0, 2}", dt.Day.ToString());
            dTime += convertToDayOfWeekCode(dt.DayOfWeek);

            //気温[CDB]書き出し
            for (int i = 0; i < 24; i++)
            {
                WeatherData wd = wRecord[i].GetData(WeatherRecord.RecordType.DryBulbTemperature);
                if (wd.Source == WeatherData.DataSource.MissingValue) return false;
                else sWriter.Write(convertTo3WordString(wd.Value * 10 + 500));
            }
            sWriter.WriteLine(dTime + "1");

            //絶対湿度[kg/kg(DA)]書き出し
            for (int i = 0; i < 24; i++)
            {
                WeatherData wd = wRecord[i].GetData(WeatherRecord.RecordType.HumidityRatio);
                if (wd.Source == WeatherData.DataSource.MissingValue) return false;
                else sWriter.Write(convertTo3WordString(wd.Value * 10000));
            }
            sWriter.WriteLine(dTime + "2");

            //法線面直達日射量[kcal/m2h]書き出し
            for (int i = 0; i < 24; i++)
            {
                WeatherData wd = wRecord[i].GetData(WeatherRecord.RecordType.DirectNormalRadiation);
                if (wd.Source == WeatherData.DataSource.MissingValue) return false;
                else sWriter.Write(convertTo3WordString(wd.Value * 0.859999));
            }
            sWriter.WriteLine(dTime + "3");

            //水平面天空日射量[kcal/m2h]書き出し
            for (int i = 0; i < 24; i++)
            {
                WeatherData wd = wRecord[i].GetData(WeatherRecord.RecordType.DiffuseHorizontalRadiation);
                if (wd.Source == WeatherData.DataSource.MissingValue) return false;
                else sWriter.Write(convertTo3WordString(wd.Value * 0.859999));
            }
            sWriter.WriteLine(dTime + "4");

            //雲量(10分比)書き出し
            for (int i = 0; i < 24; i++)
            {
                WeatherData wd = wRecord[i].GetData(WeatherRecord.RecordType.TotalSkyCover);
                if (wd.Source == WeatherData.DataSource.MissingValue) sWriter.Write("  0");
                else sWriter.Write(convertTo3WordString(wd.Value * 10));
            }
            sWriter.WriteLine(dTime + "5");

            //風向(16方位)書き出し
            for (int i = 0; i < 24; i++)
            {
                WeatherData wd = wRecord[i].GetData(WeatherRecord.RecordType.WindDirection);
                if (wd.Source == WeatherData.DataSource.MissingValue) sWriter.Write("  0");
                else sWriter.Write(convertToWindDirectionCode(wd.Value));
            }
            sWriter.WriteLine(dTime + "6");

            //風速[m/s]書き出し
            for (int i = 0; i < 24; i++)
            {
                WeatherData wd = wRecord[i].GetData(WeatherRecord.RecordType.WindSpeed);
                if (wd.Source == WeatherData.DataSource.MissingValue) sWriter.Write("  0");
                else sWriter.Write(convertTo3WordString(wd.Value * 10));
            }
            sWriter.WriteLine(dTime + "7");
            return true;
        }