Пример #1
0
        public static PropertyMapping <T>[] Read(StreamReader sr)
        {
            //read head line that tells mapping count, variable names
            string line  = sr.ReadLine();
            var    strs  = TypeConverterEx.Split <string>(line, 1);
            int    layer = int.Parse(strs[0]);

            PropertyMapping <T> [] maps = new PropertyMapping <T> [layer];

            for (int l = 0; l < layer; l++)
            {
                line = sr.ReadLine();
                strs = TypeConverterEx.Split <string>(line, 1);
                int num = int.Parse(strs[0]);
                line = sr.ReadLine();
                var varnam = TypeConverterEx.SkipSplit <string>(line, 1);
                var ids    = new string[num];
                var values = new T[num, varnam.Length];
                for (int i = 0; i < num; i++)
                {
                    line   = sr.ReadLine();
                    strs   = TypeConverterEx.Split <string>(line);
                    ids[i] = strs[0];
                    var row = TypeConverterEx.SkipSplit <T>(line, 1);
                    MatrixExtension <T> .AssignRow(values, i, row);
                }
                PropertyMapping <T> map = new PropertyMapping <T>(ids, varnam, values);
                maps[l] = map;
            }
            return(maps);
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="mappedMatrix"></param>
        /// <param name="variableIndex">starting from 0</param>
        public void Map(float[,] mappedMatrix, int variableIndex)
        {
            int row = mappedMatrix.GetLength(0);
            int col = mappedMatrix.GetLength(1);
            var map = Mappings;

            if (map != null)
            {
                var     line   = map.Keys.Cast <string>().ToArray();
                float[] ids    = TypeConverterEx.ChangeType <float>(line);
                var     values = (from dic in map select float.Parse(dic.Value[variableIndex].ToString())).ToArray();

                for (int r = 0; r < row; r++)
                {
                    for (int c = 0; c < col; c++)
                    {
                        int t = 0;
                        foreach (var kk in ids)
                        {
                            if (mappedMatrix[r, c] == kk)
                            {
                                mappedMatrix[r, c] = values[t];
                                break;
                            }
                            t++;
                        }
                        if (t == ids.Count())
                        {
                            mappedMatrix[r, c] = 9999;
                        }
                    }
                }
            }
        }
Пример #3
0
        public virtual void FromSerialArray(int var_index, int time_index, Array array)
        {
            var len = array.GetLength(0);

            for (int i = 0; i < len; i++)
            {
                this[var_index, time_index, i] = TypeConverterEx.ChangeType <T>(array.GetValue(i, 0));
            }
        }
Пример #4
0
        /// <summary>
        /// load multi-dimensional array [col][row]
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        public static double[][] Load(string file, int skiplines = 0, int maxline = -1)
        {
            double[][]   data = null;
            StreamReader sr   = new StreamReader(file);
            string       line = sr.ReadLine();
            var          vv   = TypeConverterEx.Split <double>(line);

            sr.Close();

            sr = new StreamReader(file);
            int nr = 0;

            while (!sr.EndOfStream)
            {
                line = sr.ReadLine();
                if (line != "")
                {
                    nr++;
                }
            }
            sr.Close();
            nr -= skiplines;

            if (maxline > 0 && nr > maxline)
            {
                nr = maxline;
            }

            int nc = vv.Length;

            data = new double[nc][];
            for (int i = 0; i < nc; i++)
            {
                data[i] = new double[nr];
            }

            sr = new StreamReader(file);
            for (int i = 0; i < skiplines; i++)
            {
                line = sr.ReadLine();
            }


            for (int i = 0; i < nr; i++)
            {
                line = sr.ReadLine();
                vv   = TypeConverterEx.Split <double>(line);
                for (int j = 0; j < nc; j++)
                {
                    data[j][i] = vv[j];
                }
            }
            sr.Close();
            return(data);
        }
Пример #5
0
        public void FromDataTable(DataTable dt)
        {
            int row = 0;

            foreach (DataRow dr in dt.Rows)
            {
                for (int c = 1; c < dt.Columns.Count; c++)
                {
                    _MappingTable[0, row, c - 1] = TypeConverterEx.ChangeType <T>(dr[c]);
                }
                row++;
            }
        }
Пример #6
0
        public virtual void FromRegularArray(int var_index, int time_index, Array array)
        {
            var nrow = array.GetLength(0);
            var ncol = array.GetLength(1);

            if (Topology != null)
            {
                var vec = GetVector(var_index, time_index.ToString(), ":");
                for (int i = 0; i < vec.Length; i++)
                {
                    var lc = Topology.ActiveCell[i];
                    this[var_index, time_index, i] = TypeConverterEx.ChangeType <T>(array.GetValue(lc[0], lc[1]));
                }
            }
        }
Пример #7
0
        public static T[][] LoadLayeredArray(string filename)
        {
            T[][]        matrix  = null;
            StreamReader sr      = new StreamReader(filename);
            string       content = sr.ReadToEnd().Trim(new char[] { ' ', '\n' });

            string[] lines = content.Split(StreamReaderSequence.cEnter);
            matrix = new T[lines.Length][];

            for (int i = 0; i < lines.Length; i++)
            {
                matrix[i] = TypeConverterEx.Split <T>(lines[i]);
            }
            sr.Close();
            return(matrix);
        }
Пример #8
0
        /// <summary>
        /// a text file that has the following layout
        /// ID,soil_moist_max,soil_rechr_max,soil_type (First line, column names)
        /// 255,2,1,1
        /// </summary>
        /// <param name="filename"></param>
        public void FromTextFile(string filename)
        {
            StreamReader sr   = new StreamReader(filename);
            string       line = sr.ReadLine().Trim();

            _ColNames = TypeConverterEx.Split <string>(line);
            List <string> rownames = new List <string>();

            while (!sr.EndOfStream)
            {
                line = sr.ReadLine();
                if (!string.IsNullOrEmpty(line))
                {
                    line = line.Trim();
                    var strs = TypeConverterEx.Split <string>(line);
                    rownames.Add(strs[0]);
                }
            }
            _RowNames     = rownames.ToArray();
            _MappingTable = new DataCube <T>(1, _RowNames.Length, _ColNames.Length - 1);
            _RowIndex     = new Dictionary <string, int>();
            _ColIndex     = new Dictionary <string, int>();

            for (int i = 1; i < _ColNames.Length; i++)
            {
                _ColIndex.Add(_ColNames[i], i - 1);
            }
            for (int i = 0; i < _RowNames.Length; i++)
            {
                _RowIndex.Add(_RowNames[i], i);
            }
            sr.Close();

            sr = new StreamReader(filename);
            sr.ReadLine();
            for (int i = 0; i < _RowNames.Length; i++)
            {
                line = sr.ReadLine().Trim();
                var vv = TypeConverterEx.SkipSplit <T>(line, 1);
                _MappingTable[0, i.ToString(), ":"] = vv;
            }
            sr.Close();
        }
Пример #9
0
        public static T[,] LoadMatrix(string filename)
        {
            T[,] matrix = null;
            StreamReader sr      = new StreamReader(filename);
            string       content = sr.ReadToEnd().Trim(new char[] { ' ', '\n' });

            string[] lines = content.Split(StreamReaderSequence.cEnter);
            var      vv    = TypeConverterEx.Split <T>(lines[0]);

            matrix = new T[lines.Length, vv.Count()];
            for (int i = 0; i < lines.Length; i++)
            {
                if (i != 0)
                {
                    vv = TypeConverterEx.Split <T>(lines[0]);
                }
                for (int j = 0; j < vv.Count(); j++)
                {
                    matrix[i, j] = vv[j];
                }
            }
            sr.Close();
            return(matrix);
        }
Пример #10
0
        public static OneToManyMap <T, T1> Read(string excelfile, string sheet, string keyField, string [] skippedFields)
        {
            FileStream       stream      = File.Open(excelfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

            excelReader.IsFirstRowAsColumnNames = true;
            System.Data.DataSet result = excelReader.AsDataSet();
            var dt     = result.Tables[sheet];
            var dtEnum = dt.AsEnumerable();
            int num    = dt.Rows.Count;

            var varNames    = new List <string>();
            var varColIndex = new List <int>();

            for (int c = 0; c < dt.Columns.Count; c++)
            {
                var coln = dt.Columns[c].ColumnName;
                if (!skippedFields.Contains(coln) && coln != keyField)
                {
                    varNames.Add(dt.Columns[c].ColumnName);
                    varColIndex.Add(c);
                }
            }
            T[] ids = (from r in dtEnum select TypeConverterEx.ChangeType <T>(r.Field <string>(keyField))).ToArray();
            T1[,] values = new T1[num, varNames.Count];

            for (int i = 0; i < num; i++)
            {
                for (int c = 0; c < varNames.Count; c++)
                {
                    values[i, c] = TypeConverterEx.ChangeType <T1>(dt.Rows[i][varColIndex[c]].ToString());
                }
            }

            return(new OneToManyMap <T, T1>(ids, varNames.ToArray(), values));
        }