/// <summary> /// Loose string comparison. Returns the best match using increasingly inaccurate comparisons. /// Also makes sure there is a sole match at that level of accuracy. /// /// Spaces in the select string are ignored. /// /// The levels are: /// <list> /// <item>Perfect match (abcd in abcd)</item> /// <item>Prefix match (ab in abcd)</item> /// <item>Containing match (bc in abcd)</item> /// <item>Matching ordered sequence of characters (bd in abcd)</item> /// </list> /// </summary> public static string LooseSelect( IEnumerable <string> options, string find, StringComparison sc) { find = find.Replace(" ", ""); var ec = sc.GetCorrespondingComparer(); var matches = new List <string> (); int bestQuality = 0; foreach (var s in options) { int quality = -1; if (s.Equals(find, sc)) { quality = 10; } else if (s.StartsWith(find, sc)) { quality = 8; } else if (s.Contains(find, sc)) { quality = 6; } else if (StringContainsSequence(s, find, sc)) { quality = 3; } if (quality >= bestQuality) { if (quality > bestQuality) { bestQuality = quality; matches.Clear(); } matches.Add(s); } } if (matches.Count == 1) { return(matches[0]); } if (matches.Count > 1) { Console.WriteLine("Identifier not unique: " + find); } else { Console.WriteLine("Could not find identifier: " + find); } return(null); }
/// <summary> /// Loose string comparison. Returns the best match using increasingly inaccurate comparisons. /// Also makes sure there is a sole match at that level of accuracy. /// /// Spaces in the select string are ignored. /// /// The levels are: /// <list> /// <item>Perfect match (abcd in abcd)</item> /// <item>Prefix match (ab in abcd)</item> /// <item>Containing match (bc in abcd)</item> /// <item>Matching ordered sequence of characters (bd in abcd)</item> /// </list> /// </summary> public static string LooseSelect(this string select, IEnumerable <string> source, StringComparison sc) { select = select.Replace(" ", ""); StringComparer ec = sc.GetCorrespondingComparer(); List <string> matches = new List <string>(); int bestQuality = 0; foreach (var s in source) { int quality = -1; if (s.Equals(select, sc)) { quality = 10; } else if (s.StartsWith(select, sc)) { quality = 8; } else if (s.Contains(select, sc)) { quality = 6; } else if (StringContainsSequence(s, select)) { quality = 3; } if (quality >= bestQuality) { if (quality > bestQuality) { bestQuality = quality; matches.Clear(); } matches.Add(s); } } if (matches.Count == 1) { return(matches[0]); } //if (matches.Count > 1) //{ // Console.WriteLine("Identifier not unique: " + select); //} //else //{ // Console.WriteLine("Could not find identifier: " + select); //} return(null); }
public MI_If() : base("if") { HelpText = "" + "if [not] <condition> <command>\n" + "Executes <command> if <condition> is met.\n" + "If the modifier <not> is given, the condition result is reversed."; Conditions = new Dictionary <string, ConditionCheck> (StringComparison.GetCorrespondingComparer()); Conditions.Add("true", True); Conditions.Add("false", False); }