public PairListEditor(Pair pairList) { InitializeComponent(); listbox.Items.Clear(); for (int i = 0; i < pairList.From.Count; i++) { string temp = pairList.From[i] + " -> " + pairList.To[i]; listbox.Items.Add(temp); } this.pairList = pairList; from.Text = pairList.From[0]; to.Text = pairList.To[0]; count.Text = "总计" + pairList.From.Count.ToString() + "项"; }
public Pair LoadPairFromFile(string filename) { Pair p = new Pair(Path.GetFileNameWithoutExtension(filename)); List<string> lines = GetLinesFromFile(filename); // 总共有两种类型,只有两行的单字符对照,以及多行的字符串对照 if (lines.Count == 2) { // 对于只有两行的单字符对照进行读取,返回一个Pair int length = lines[0].Length <= lines[1].Length ? lines[0].Length : lines[1].Length; for (int i = 0; i < length; i++) { p.From.Add(lines[0][i].ToString()); p.To.Add(lines[1][i].ToString()); } p.usingRex = false; } else if (lines.Count > 2) { Regex bracketCheck = new Regex(@"^\[.*?\]$"); Regex keyCheck = new Regex(@"(?<=^\[).+(?==)"); Regex valueCheck = new Regex(@"(?<==).+(?=\]$)"); string separator = "->"; foreach (string str in lines) { if (bracketCheck.IsMatch(str)) { string key = keyCheck.Match(str).ToString(); string value = valueCheck.Match(str).ToString(); try { if (key == "UseRex") p.usingRex = Convert.ToBoolean(value); else if (key == "Separator") separator = value; else if (key == "Space") p.Space = CheckRegExpStyle(value); else if (key == "Empty") p.Empty = CheckRegExpStyle(value); else if (key == "IgnoreCase" && Convert.ToBoolean(value)) p.RegOptions |= RegexOptions.IgnoreCase; else if (key == "Multiline" && Convert.ToBoolean(value)) p.RegOptions |= RegexOptions.Multiline; else if (key == "Singleline" && Convert.ToBoolean(value)) p.RegOptions |= RegexOptions.Singleline; else if (key == "IgnorePatternWhitespace" && Convert.ToBoolean(value)) p.RegOptions |= RegexOptions.IgnorePatternWhitespace; else if (key == "ExplicitCapture" && Convert.ToBoolean(value)) p.RegOptions |= RegexOptions.ExplicitCapture; } catch (Exception) { MessageBox.Show(key + " : " + value); } } else { Regex pairCheck = new Regex(separator); string[] ss = pairCheck.Split(str); if (ss.Length < 2) continue; p.From.Add(ss[0]); p.To.Add(ss[1]); } } p.CheckSpaceAndEmpty(); } else { // 表明外部文件有问题,内容不足两行 return null; } return p; }