/*! * \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); } } }