Esempio n. 1
0
        public new void Add(string key, WordInfoOnce value)
        {
            if (ContainsKey(key))
            {
                //$"{name}已存在键:{key}。".WriteWarningLine();
                return;//已有
            }

            if (name == "默认")
            {
                var w = value;
                if (w.p?.StartsWith("i", StringComparison.OrdinalIgnoreCase) == true)
                {
                    Idioms.Add(w.w, w);                                                                  //成语词典
                }
                else if (w.p?.StartsWith("nr", StringComparison.OrdinalIgnoreCase) == true)
                {
                    PersonNames.Add(w.w, w);                                                                        //人名词典
                }
                else if (w.p?.StartsWith("ns", StringComparison.OrdinalIgnoreCase) == true)
                {
                    PlaceNames.Add(w.w, w);                                                                        //地
                }
                else
                {
                    TempWords.Add(key, value);
                }
            }
            else
            {
                base.Add(key, value);
            }
        }
Esempio n. 2
0
        private void StreamReaderAll(StreamReader sr)
        {
            //$"{name}数据量比较大{sr.BaseStream.Length}BS,初始化数据需要一些时间,请耐心等待".WriteInfoLine(ConsoleColor.Cyan);
            long lineCount = 0;
            var  dt0       = DateTime.Now;

            while (!sr.EndOfStream)
            {
                var line = sr.ReadLine();
                if (line == "")
                {
                    continue;            //空行
                }
                lineCount++;

                WordInfoOnce w    = null;
                string[]     keys = new string[0];

                if (line.StartsWith("{"))
                {
                    w = JsonConvert.DeserializeObject <WordInfoOnce>(line);
                }
                else
                {
                    if (line.IndexOf('\t') > 0)
                    {
                        keys = line.Split('\t');
                    }
                    else
                    {
                        keys = line.Split(' ');
                    }

                    if (keys.Length >= 8)
                    {
                        //sw.WriteLine($"{w.w}\t{w.f}\t{w.p}\t{w.l}\t{w.o}\t{w.py}\t{w.isp}\t{w.pt}");
                        w = new WordInfoOnce()
                        {
                            w   = keys[0],
                            f   = string.IsNullOrEmpty(keys[1]) ? 0 : double.Parse(keys[1]),
                            p   = keys[2],
                            l   = keys[3],
                            o   = string.IsNullOrEmpty(keys[4]) ? null : (byte?)byte.Parse(keys[4]),
                            py  = keys[5],
                            isp = string.IsNullOrEmpty(keys[4]) ? null : (bool?)bool.Parse(keys[6]),
                            pt  = keys[7],
                        };
                    }
                    else if (keys.Length > 3)
                    {
                        w = new WordInfoOnce()
                        {
                            w = string.Join(" ", keys.Take(keys.Length - 2)),
                            p = keys[keys.Length - 1],
                        };
                        double d = 0;
                        var    b = double.TryParse(keys[keys.Length - 2], out d);
                        if (!b)
                        {
                            b = double.TryParse(keys[1], out d);
                        }
                        w.f = d;
                    }
                    else if (keys.Length == 3)
                    {
                        w = new WordInfoOnce()
                        {
                            w = keys[0],
                            p = keys[2],
                        };
                        double d = 0;
                        var    b = double.TryParse(keys[1], out d);
                        w.f = d;
                    }
                    else if (keys.Length == 2)
                    {
                        w = new WordInfoOnce()
                        {
                            w = keys[0],
                        };
                        double d = 0;
                        var    b = double.TryParse(keys[1], out d);
                        w.f = d;
                    }
                    else
                    {
                        w = new WordInfoOnce()
                        {
                            w = keys[0],
                        };
                    }
                }

                //分文件
                if (name == "词典" || name == "临时")
                {
                    //Console.Write($"{name}.");
                    if (name != ("成语") && w.p?.StartsWith("i", StringComparison.OrdinalIgnoreCase) == true)
                    {
                        Idioms.AddNew(w.w, w);                                                                                    //成语词典
                    }
                    else if (name != ("人名") && w.p?.StartsWith("nr", StringComparison.OrdinalIgnoreCase) == true)
                    {
                        PersonNames.AddNew(w.w, w);                                                                                          //人名词典
                    }
                    else if (name != ("地名") && w.p?.StartsWith("ns", StringComparison.OrdinalIgnoreCase) == true)
                    {
                        PlaceNames.AddNew(w.w, w);                                                                                          //地名词典
                    }
                    else//词典或临时
                    {
                        if (!base.ContainsKey(w.w))
                        {
                            base.Add(w.w, w);
                        }
                        else if (!base.ContainsKey(w.Key))
                        {
                            var item = base[w.w];
                            if (item.p != w.p)
                            {
                                base.Add(w.Key, w.SetKeyType(KeyType.Key));
                            }
                        }
                    }
                }
                else
                {
                    if (!base.ContainsKey(w.w))
                    {
                        base.Add(w.w, w);
                    }
                    else if (!base.ContainsKey(w.Key))
                    {
                        var item = base[w.w];
                        if (item.p != w.p)
                        {
                            base.Add(w.Key, w.SetKeyType(KeyType.Key));
                        }
                    }
                }

                //3秒提醒
                if (lineCount % 1000 == 0 && DateTime.Now.AddSeconds(-3) > dt0)
                {
                    dt0 = DateTime.Now;
                    $"{name}已完成{lineCount}".WriteInfoLine(ConsoleColor.Cyan);
                }
            }

            if (this.Count != lineCount)
            {
                savetimes++;                         //保存
            }
        }