Skip to content

CLI

class CliArgs
{
    string _dir;
    public string Dir =>_dir; 

    DateTime _date;
    public DateTime Date => _date;

    public int ParseArgs(string[] args)
    {
        int ret = 0;

        List<string> pars;
        Dictionary<string, List<string>> clipars;
        ret = CliParams(args, out clipars);

        //dir
        if (clipars.TryGetValue("-dir", out pars) && par.Count > 0) {
            _dir = pars[0].Trim();
            if (string.IsNullOrEmpty(_dir)) {
                return Log.Err($"'-dir' parameter is not a directory");
            }
        }
        else {
            return Log.Err($"'-dir' parameter is required but not provided");
        }

        //date
        if (clipars.TryGetValue("-date", out pars) && par.Count > 0) {
            var par = pars[0].Trim();
            if (string.IsNullOrEmpty(par)) {
                _date = DateTime.MinValue;
            }
            else {
                _date = DateTime.ParseExact(par, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
            }
        }
        else {
            _date = DateTime.MinValue;
        }

        return ret;
    }

    int CliParams(string[] args, out Dictionary<string, List<string>> clipars)
    {
        int ret = 0;
        cli = null;

        int i = 0;
        int n = args.Length;
        clipars = new Dictionary<string, List<string>>();
        while (i < n) {
            if (args[i][0] != '-') {
                return Log.Err($"Arg '{args[i]}' unexpected - should be an -option?");
            }

            var opt = args[i];
            var pars = new List<string>();
            while (++i != n) {
                if (args[i].Length > 0 && args[i][0] == '-')
                    break;
                pars.Add(args[i]);
            }
            clipars[opt] = pars;
        }
        return ret;
    }
}