Range


SUBMITTED BY: Guest

DATE: Jan. 17, 2014, 3:08 p.m.

FORMAT: C#

SIZE: 2.9 kB

HITS: 732

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text.RegularExpressions;
  5. using System.Windows.Forms;
  6. namespace Lib
  7. {
  8. public class Range
  9. {
  10. public List<object> Values = new List<object>();
  11. public static Range Create(string v, object[] array)
  12. {
  13. var rv = replaceLetters(v);
  14. var ret = new Range();
  15. if (v.Contains(";"))
  16. {
  17. ret.Values.AddRange(v.Split(';'));
  18. }
  19. if (v.Contains(":"))
  20. {
  21. var splited = rv.Split(':');
  22. if (char.IsLetter(Convert.ToChar(splited[0])))
  23. {
  24. var first = Convert.ToInt32(splited[0]);
  25. var second = Convert.ToInt32(splited[1]);
  26. for (var i = first; i <= second; i++)
  27. {
  28. ret.Values.Add(array[i]);
  29. }
  30. }
  31. else
  32. {
  33. var r = "abcdefghijklmnopqrstuvwxyz".ToCharArray();
  34. var first = Convert.ToInt32(splited[0]);
  35. var second = Convert.ToInt32(splited[1]);
  36. for (var i = first; i <= second; i++)
  37. {
  38. ret.Values.Add(r[i]);
  39. }
  40. }
  41. }
  42. return ret;
  43. }
  44. public static Range Create(string v)
  45. {
  46. return Create(v, new List<string>().ToArray());
  47. }
  48. private static string replaceLetters(string s)
  49. {
  50. var replacements = getLetters();
  51. var regex = new Regex(String.Join("|", replacements.Keys.Select(Regex.Escape)));
  52. var replaced = regex.Replace(s, m => replacements[m.Value].ToString());
  53. return replaced;
  54. }
  55. private static Dictionary<string, int> getLetters()
  56. {
  57. const string abc = "abcdefghijklmnopqrstuvwxyz";
  58. return abc.ToDictionary(l => l.ToString(), l => abc.IndexOf(l));
  59. }
  60. #region "operators"
  61. public static implicit operator Range(string s)
  62. {
  63. return Create(s);
  64. }
  65. public static explicit operator List<object>(Range l)
  66. {
  67. return l.Values;
  68. }
  69. public static Range operator +(Range r1, Range r2)
  70. {
  71. var r = new Range();
  72. r.Values.AddRange(new[] { r1 });
  73. r.Values.AddRange(new[] { r2 });
  74. return r;
  75. }
  76. #endregion
  77. }
  78. }

comments powered by Disqus