Exemple #1
0
            /*!
             * \brief   Constructor to load external csv-File as plant database.
             *
             * \param   plantDbFileStream   A file stream to read csv data from.
             *
             * \code{.unparsed}
             * 'create filestream for csv data file
             * Dim fs As System.IO.FileStream = New IO.FileStream("C:\DHI\MIKE-Basin_PlantData.csv", IO.FileMode.Open)
             * 'create new plantDb
             * Dim plantDb As atbApi.data.PlantDb = New atbApi.data.PlantDb(fs)
             * 'important: close fileStream after PlantDb is created
             * fs.Close()
             * 'create new plant and provide your own plantDb to constructor
             * Dim myPlant As atbApi.data.Plant = New atbApi.data.Plant("CROPWAT_80_Crop_data_CITRUS_70p_ca_bare", plantDb)
             * \endcode
             */

            public PlantDb(Stream plantDbFileStream, CultureInfo cultureInfo = null)
            {
                this.plantDbFileStream = plantDbFileStream;
                CsvReader csvReader = new CsvReader(plantDbFileStream);

                while (!csvReader.EndOfStream())
                {
                    IDictionary <String, String> fields;
                    fields = csvReader.readLine();
                    //Debug.WriteLine(fields["dataObjName"] + " day: " + fields["_iterator.day"]);

                    if (fields == null || !fields.ContainsKey("dataObjName") || String.IsNullOrEmpty(fields["dataObjName"]))
                    {
                        continue;
                    }
                    String name = fields["dataObjName"];

                    if (!plantData.ContainsKey(name))
                    {
                        plantData.Add(name, new Dictionary <int, PlantValues>());
                        plantStagesLength.Add(name, 0);
                        initialEnd.Add(name, 0);
                    }
                    IDictionary <int, PlantValues> plantValues = plantData[name];
                    PlantValues values = new PlantValues();
                    values.parseData(fields, cultureInfo != null ? cultureInfo : CultureInfo.InvariantCulture);
                    int _iterator = Int32.Parse(fields["_iterator.day"], cultureInfo != null ? cultureInfo : CultureInfo.InvariantCulture);
                    plantValues.Add(_iterator, values);
                    plantStagesLength[name] = Math.Max(plantStagesLength[name], _iterator);
                    if (values.stage.Equals(PlantStage.initial))
                    {
                        if (!initialEnd.ContainsKey(name))
                        {
                            initialEnd[name] = 0;
                        }
                        initialEnd[name] = Math.Max(initialEnd[name], _iterator);
                    }
                    if (values.stage.Equals(PlantStage.development))
                    {
                        if (!developmentEnd.ContainsKey(name))
                        {
                            developmentEnd[name] = 0;
                        }
                        developmentEnd[name] = Math.Max(developmentEnd[name], _iterator);
                    }
                }
            }