Home
Manage Your Code
Snippet: Arguments (C#)
Title: Arguments Language: C#
Description: for command line Views: 167
Author: joyce chan Date Added: 1/31/2008
Copy Code  
1using System;
2using System.Collections.Specialized;
3using System.Text.RegularExpressions;
4
5namespace CommandLine
6{
7    /// <summary>

8    /// Arguments class

9    /// </summary>

10    public class Arguments
11    {
12        // Variables

13        private StringDictionary Parameters;
14
15        // Constructor

16        public Arguments(string[] Args)
17        {
18            Parameters = new StringDictionary();
19            Regex Spliter = new Regex(@"^-{1,2}|^/|=|:", RegexOptions.IgnoreCase | RegexOptions.Compiled);
20            Regex Remover = new Regex(@"^['""]?(.*?)['""]?$", RegexOptions.IgnoreCase | RegexOptions.Compiled);
21            string Parameter = null;
22            string[] Parts;
23
24            // Valid parameters forms:

25            // {-,/,--}param{ ,=,:}((",')value(",'))

26            // Examples: -param1 value1 --param2 /param3:"Test-:-work" /param4=happy -param5 '--=nice=--'

27            foreach (string Txt in Args)
28            {
29                // Look for new parameters (-,/ or --) and a possible enclosed value (=,:)

30                Parts = Spliter.Split(Txt, 3);
31                switch (Parts.Length)
32                {
33                    // Found a value (for the last parameter found (space separator))

34                    case 1:
35                        if (Parameter != null)
36                        {
37                            if (!Parameters.ContainsKey(Parameter))
38                            {
39                                Parts[0] = Remover.Replace(Parts[0], "$1");
40                                Parameters.Add(Parameter, Parts[0]);
41                            }
42                            Parameter = null;
43                        }
44                        // else Error: no parameter waiting for a value (skipped)

45                        break;
46                    // Found just a parameter

47                    case 2:
48                        // The last parameter is still waiting. With no value, set it to true.

49                        if (Parameter != null)
50                        {
51                            if (!Parameters.ContainsKey(Parameter)) Parameters.Add(Parameter, "true");
52                        }
53                        Parameter = Parts[1];
54                        break;
55                    // Parameter with enclosed value

56                    case 3:
57                        // The last parameter is still waiting. With no value, set it to true.

58                        if (Parameter != null)
59                        {
60                            if (!Parameters.ContainsKey(Parameter)) Parameters.Add(Parameter, "true");
61                        }
62                        Parameter = Parts[1];
63                        // Remove possible enclosing characters (",')
64                        if (!Parameters.ContainsKey(Parameter))
65                        {
66                            Parts[2] = Remover.Replace(Parts[2], "$1");
67                            Parameters.Add(Parameter, Parts[2]);
68                        }
69                        Parameter = null;
70                        break;
71                }
72            }
73            // In case a parameter is still waiting
74            if (Parameter != null)
75            {
76                if (!Parameters.ContainsKey(Parameter)) Parameters.Add(Parameter, "true");

77            }
78        }
79
80        // Retrieve a parameter value if it exists

81        public string this[string Param]
82        {
83            get
84            {
85                return (Parameters[Param]);
86            }
87        }
88
89    }//end class

90}//end namespace