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); } }
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++; //保存 } }