Exemple #1
0
        private string SolveExpressionPrevValues()
        {
            string exp = _expression;

            foreach (Function func in _functions)
            {
                switch (func.Type)
                {
                case Function.FunctionType.SequentialIntFunction:
                    SequentialIntFunction sif = (SequentialIntFunction)func;
                    exp = exp.Replace(sif.Name, sif.PrevVal().ToString().PadLeft(sif.Padding, '0'));
                    break;

                case Function.FunctionType.SequentialCharFunction:
                    SequentialCharFunction scf = (SequentialCharFunction)func;
                    exp = exp.Replace(scf.Name, scf.PrevVal().ToString());
                    break;

                case Function.FunctionType.ConstantTextFunction:
                    ConstantTextFunction ctf = (ConstantTextFunction)func;
                    exp = exp.Replace(ctf.Name, ctf.Constant);
                    break;

                case Function.FunctionType.ConstantFileFunction:
                    ConstantFileFunction cff = (ConstantFileFunction)func;
                    exp = exp.Replace(cff.Name, cff.NextVal());
                    break;

                case Function.FunctionType.ConstantFileFunctionEx:
                    ConstantFileFunctionEx cffe = (ConstantFileFunctionEx)func;
                    exp = exp.Replace(cffe.Name, cffe.NextVal());
                    break;

                case Function.FunctionType.ConstantFileExtFunction:
                    ConstantFileExtFunction cfef = (ConstantFileExtFunction)func;
                    exp = exp.Replace(cfef.Name, cfef.NextVal());
                    break;
                }
            }
            return(exp);
        }
Exemple #2
0
        public string SolveExpressionFromBeginning(int iteration)
        {
            string exp = _expression;

            foreach (Function func in _functions)
            {
                switch (func.Type)
                {
                case Function.FunctionType.SequentialIntFunction:
                    SequentialIntFunction sif = (SequentialIntFunction)func;
                    exp = exp.Replace(sif.Name, sif.AllVals(iteration).Last <int>().ToString().PadLeft(sif.Padding, '0'));
                    break;

                case Function.FunctionType.SequentialCharFunction:
                    SequentialCharFunction scf = (SequentialCharFunction)func;
                    exp = exp.Replace(scf.Name, scf.AllVals(iteration).Last <char>().ToString());
                    break;

                case Function.FunctionType.ConstantTextFunction:
                    ConstantTextFunction ctf = (ConstantTextFunction)func;
                    exp = exp.Replace(ctf.Name, ctf.Constant);
                    break;

                case Function.FunctionType.ConstantFileFunction:
                    ConstantFileFunction cff = (ConstantFileFunction)func;
                    exp = exp.Replace(cff.Name, cff.NextVal());
                    break;

                case Function.FunctionType.ConstantFileFunctionEx:
                    ConstantFileFunctionEx cffe = (ConstantFileFunctionEx)func;
                    exp = exp.Replace(cffe.Name, cffe.NextVal());
                    break;

                case Function.FunctionType.ConstantFileExtFunction:
                    ConstantFileExtFunction cfef = (ConstantFileExtFunction)func;
                    exp = exp.Replace(cfef.Name, cfef.NextVal());
                    break;
                }
            }
            return(exp);
        }
Exemple #3
0
        public static Generalization[] Generate(string str1, string str2, TimeSpan time)
        {
            List <Generalization> gens = new List <Generalization>();

            bool   is_file;
            string folder1, folder2;

            if (Directory.Exists(str2))
            {
                is_file = false;
                folder1 = Directory.GetParent(str1).FullName;
                folder2 = Directory.GetParent(str2).FullName;
            }
            else
            {
                is_file = true;
                folder1 = Path.GetDirectoryName(str1);
                folder2 = Path.GetDirectoryName(str2);
            }

            // if both files have the same directory, then there might be a generalization
            if (folder1 == folder2)
            {
                List <ConstantFileFunction>    cff  = new List <ConstantFileFunction>();
                List <ConstantFileFunctionEx>  cffe = new List <ConstantFileFunctionEx>();
                List <SequentialIntFunction>   sifs = new List <SequentialIntFunction>();
                List <SequentialCharFunction>  scfs = new List <SequentialCharFunction>();
                List <ConstantFileExtFunction> cfef = new List <ConstantFileExtFunction>();
                List <ConstantTextFunction>    ctfs = new List <ConstantTextFunction>();
                string expression = string.Empty;

                string file1 = Path.GetFileNameWithoutExtension(str1);
                string file2 = Path.GetFileNameWithoutExtension(str2);

                List <string> extensions = new List <string>();

                // detect which file extensions show the operations be applied to
                if (is_file)
                {
                    if (Path.GetExtension(str1) == Path.GetExtension(str2) && Path.GetExtension(str1) != string.Empty)
                    {
                        extensions.Add(Path.GetExtension(str2));
                    }
                    extensions.Add(".*");
                }

                // SequentialIntFunction
                if (SequentialIntFunction.Generate(file1, file2, out expression, out sifs))
                {
                    gens.Add(new FileDeleteGeneralization(expression, sifs.ToArray(), str2, time, 2));
                }
                // SequentialCharFunction
                if (SequentialCharFunction.Generate(file1, file2, out expression, out scfs))
                {
                    gens.Add(new FileDeleteGeneralization(expression, scfs.ToArray(), str2, time, 2));
                }
                // ConstantFileFunction
                if (ConstantFileFunction.Generate(file1, file2, folder2, extensions.ToArray(), out expression, out cff))
                {
                    gens.Add(new FileDeleteGeneralization(expression, cff.ToArray(), str2, time, 2));
                }
                // ConstantFileFunctionEx
                if (ConstantFileFunctionEx.Generate(file1, file2, folder2, extensions.ToArray(), out expression, out cffe))
                {
                    gens.Add(new FileDeleteGeneralization(expression, cffe.ToArray(), str2, time, 2));
                }
                // ConstantFileExtFunction
                if (ConstantFileExtFunction.Generate(folder2, extensions.ToArray(), out expression, out cfef))
                {
                    gens.Add(new FileDeleteGeneralization(expression, cfef.ToArray(), str2, time, 2));
                }
                // ConstantTextFunction
                if (ConstantTextFunction.Generate(file1, file2, out expression, out ctfs))
                {
                    gens.Add(new FileDeleteGeneralization(expression, ctfs.ToArray(), str2, time, 2));
                }
            }
            return(gens.ToArray());
        }
        public static bool Generate(string file1, string file2, string folder, string[] extensions, out string expression, out List <ConstantFileFunctionEx> functions)
        {
            expression = string.Empty;
            functions  = new List <ConstantFileFunctionEx>();
            List <Pair <Pair <int, string>, Pair <int, string> > > diffs = Diff.DiffString(file1, file2);

            if (diffs.Count > 0)
            {
                //int file1_last_token_beginning = 0, file2_last_token_beginning = 0;
                string           token         = string.Empty;
                HashSet <string> file1_tokens  = new HashSet <string>();
                HashSet <string> file2_tokens  = new HashSet <string>();
                HashSet <string> common_tokens = new HashSet <string>();
                char[]           splitter      = new char[] { ' ', '_', '-', '.', '\'', ',' };

                //// grab the constant tokens
                //for (int i = 0; i < diffs.Count; i++)
                //{
                //    Pair<Pair<int, string>, Pair<int, string>> diff = diffs[i];

                //    if (diff.First.First > file1_last_token_beginning)
                //    {
                //        token = file1.Substring(file1_last_token_beginning, diff.First.First - file1_last_token_beginning);
                //        file1_tokens.Add(token);
                //    }
                //    file1_last_token_beginning = diff.First.First + diff.First.Second.Length;

                //    if (diff.Second.First > file2_last_token_beginning)
                //    {
                //        token = file2.Substring(file2_last_token_beginning, diff.Second.First - file2_last_token_beginning);
                //        file2_tokens.Add(token);
                //    }
                //    file2_last_token_beginning = diff.Second.First + diff.Second.Second.Length;
                //}
                //if (file1_last_token_beginning < file1.Length)
                //{
                //    token = file1.Substring(file1_last_token_beginning, file1.Length - file1_last_token_beginning);
                //    file1_tokens.Add(token);
                //}
                //if (file2_last_token_beginning < file2.Length)
                //{
                //    token = file2.Substring(file2_last_token_beginning, file2.Length - file2_last_token_beginning);
                //    file2_tokens.Add(token);
                //}

                //// refine file1 tokens
                //HashSet<string> refined_tokens = new HashSet<string>();
                //foreach (string t in file1_tokens)
                //{
                //    string[] ref_ts = t.Trim().Split(new char[] { ' ' });
                //    foreach (string ref_t in ref_ts)
                //        if (ref_t.Trim() != string.Empty)
                //            refined_tokens.Add(ref_t.ToLower());
                //}
                //file1_tokens = refined_tokens;

                //// refine file2 tokens
                //refined_tokens.Clear();
                //foreach (string t in file2_tokens)
                //{
                //    string[] ref_ts = t.Trim().Split(new char[] { ' ' });
                //    foreach (string ref_t in ref_ts)
                //        if (ref_t.Trim() != string.Empty)
                //            refined_tokens.Add(ref_t.ToLower());
                //}
                //file2_tokens = refined_tokens;

                file1_tokens = new HashSet <string>(file1.Split(splitter, StringSplitOptions.RemoveEmptyEntries));
                file2_tokens = new HashSet <string>(file2.Split(splitter, StringSplitOptions.RemoveEmptyEntries));

                foreach (string token1 in file1_tokens)
                {
                    foreach (string token2 in file2_tokens)
                    {
                        if (token1.ToLower() == token2.ToLower())
                        {
                            if (token1.Length > 1)
                            {
                                common_tokens.Add(token1.ToLower());
                                break;
                            }
                        }
                    }
                }

                // if there is more than one common token, there's a generalization
                if (common_tokens.Count > 0)
                {
                    string f_name = "§1";
                    expression = f_name;
                    ConstantFileFunctionEx cffe = new ConstantFileFunctionEx(f_name, common_tokens.ToArray <string>(), folder, extensions);
                    functions.Add(cffe);
                }
            }
            if (functions.Count > 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }