using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Windows.Forms; namespace Lib { public class Range { public List Values = new List(); public static Range Create(string v, object[] array) { var rv = replaceLetters(v); var ret = new Range(); if (v.Contains(";")) { ret.Values.AddRange(v.Split(';')); } if (v.Contains(":")) { var splited = rv.Split(':'); if (char.IsLetter(Convert.ToChar(splited[0]))) { var first = Convert.ToInt32(splited[0]); var second = Convert.ToInt32(splited[1]); for (var i = first; i <= second; i++) { ret.Values.Add(array[i]); } } else { var r = "abcdefghijklmnopqrstuvwxyz".ToCharArray(); var first = Convert.ToInt32(splited[0]); var second = Convert.ToInt32(splited[1]); for (var i = first; i <= second; i++) { ret.Values.Add(r[i]); } } } return ret; } public static Range Create(string v) { return Create(v, new List().ToArray()); } private static string replaceLetters(string s) { var replacements = getLetters(); var regex = new Regex(String.Join("|", replacements.Keys.Select(Regex.Escape))); var replaced = regex.Replace(s, m => replacements[m.Value].ToString()); return replaced; } private static Dictionary getLetters() { const string abc = "abcdefghijklmnopqrstuvwxyz"; return abc.ToDictionary(l => l.ToString(), l => abc.IndexOf(l)); } #region "operators" public static implicit operator Range(string s) { return Create(s); } public static explicit operator List(Range l) { return l.Values; } public static Range operator +(Range r1, Range r2) { var r = new Range(); r.Values.AddRange(new[] { r1 }); r.Values.AddRange(new[] { r2 }); return r; } #endregion } }