예제 #1
0
        /// <summary>
        /// 读取
        /// </summary>
        /// <returns></returns>
        public override ObjectTableStorage Read()
        {
            using (StreamReader reader = new StreamReader(Stream, this.Encoding))
            {
                //记录第一次出现的数据类型,后续依此转换
                var name = Path.GetFileNameWithoutExtension(FilePath);

                ObjectTableStorage storage = new ObjectTableStorage(name);

                string  [] titles = null;
                var        line   = "";
                int        index  = -1;
                while ((line = reader.ReadLine()) != null)
                {
                    if (String.IsNullOrWhiteSpace(line))
                    {
                        continue;
                    }

                    index++;
                    if (index == 0)//tittle
                    {
                        titles = line.Split(Spliters, StringSplitOptions);
                        ColTypes.InitNames(titles);
                        continue;
                    }

                    var vals = line.Split(Spliters, StringSplitOptions);//, StringSplitOptions.RemoveEmptyEntries);
                    storage.NewRow();
                    int length = Math.Min(titles.Length, vals.Length);
                    for (int i = 0; i < length; i++)
                    {
                        var    title  = titles[i].Trim();
                        var    type   = ColTypes[title];
                        var    val    = vals[i];
                        object newVal = null;
                        if (!Appeared.Contains(i))
                        {
                            type.ValueType = ValueTypeHelper.GetValueType(val);
                            Appeared.Add(i);
                        }
                        if (type.ValueType == ValueType.Unknown)
                        {
                            type.ValueType = ValueTypeHelper.GetValueType(val);
                        }

                        newVal = type.GetValue(val);

                        if (newVal != null)//更新类型
                        {
                            // type.ValueType = ValueTypeHelper.GetValueType(currentVal);
                            storage.AddItem(title, newVal);
                        }
                    }
                    //storage.AddItem(titles, vals);
                    storage.EndRow();
                }
                return(storage);
            }
        }
예제 #2
0
        /// <summary>
        /// 读取
        /// </summary>
        /// <returns></returns>
        public override ObjectTableManager Read()
        {
            using (StreamReader reader = new StreamReader(Stream, this.Encoding))
            {
                //记录第一次出现的数据类型,后续依此转换
                var name = Path.GetFileNameWithoutExtension(FilePath);

                ObjectTableManager mgr = new ObjectTableManager()
                {
                    Name = name
                };

                string  [] titles      = null;
                var        line        = "";
                int        index       = -1;
                bool       isHeaderEnd = false;
                while ((line = reader.ReadLine()) != null)
                {
                    if (String.IsNullOrWhiteSpace(line))
                    {
                        continue;
                    }

                    index++;

                    //处理头部
                    if (!isHeaderEnd)
                    {
                        string marker;
                        if (IsHeaderLine(line, out marker))
                        {
                            line = line.Replace(marker, "");
                            if (String.IsNullOrWhiteSpace(line))
                            {
                                continue;
                            }

                            titles = line.Split(Spliters, StringSplitOptions.RemoveEmptyEntries);
                            var colNameMgr = new NamedValueTypeManager( );
                            colNameMgr.InitNames(titles);
                            var key = titles[0].Trim();
                            ColTypes[key] = colNameMgr;

                            mgr.AddTable(key);
                            continue;
                        }
                        else
                        {
                            isHeaderEnd = true;
                        }
                    }

                    //处理内容
                    if (String.IsNullOrWhiteSpace(line))
                    {
                        continue;
                    }

                    var strs = line.Split(Spliters, StringSplitOptions.None);//, StringSplitOptions.RemoveEmptyEntries);

                    var        keyName = strs[0].Trim();
                    var        storage = mgr.Get(keyName);
                    List <int> appeard = null;
                    if (!Appeared.ContainsKey(keyName))
                    {
                        Appeared[keyName] = new List <int>();
                    }
                    appeard = Appeared[keyName];

                    var colTypes = ColTypes[keyName];
                    titles = colTypes.Titles;
                    storage.NewRow();
                    int length = Math.Min(titles.Length, strs.Length);
                    for (int i = 1; i < length; i++)
                    {
                        var title = titles[i].Trim();
                        var type  = colTypes[title];
                        var val   = strs[i];

                        object newVal = null;
                        if (!appeard.Contains(i))
                        {
                            type.ValueType = ValueTypeHelper.GetValueType(val, IsIntOrFloatFirst);
                            appeard.Add(i);
                        }
                        newVal = type.GetValue(val);

                        if (newVal != null)
                        {
                            storage.AddItem(title, newVal);
                        }
                    }
                    //storage.AddItem(titles, vals);
                    storage.EndRow();
                }
                return(mgr);
            }
        }