Пример #1
0
        static void Main()
        {
            ShearhFunction ShearhF = null;
            Func <string, string, ShearchItemClass> ShearhFunc = null;

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

            string WorkFile = OpenFiletoList(ref words);

            Console.WriteLine("Строка для поиска :");
            string FindString = Console.ReadLine();
            int    FindType   = FindTypeEnter();

            switch (FindType)
            {
            case 1:
                ShearhF    = new ShearhFunction(L5.LevenshteinDistance.StrContains);
                ShearhFunc = new Func <string, string, ShearchItemClass>((firstText, secondText) =>
                {
                    ShearchItemClass ShearchIt = new ShearchItemClass(firstText, 0);
                    if (firstText.Contains(secondText))
                    {
                        ShearchIt.Distance = 0;
                    }
                    else
                    {
                        ShearchIt.Distance = 100;
                    }
                    return(ShearchIt);
                });               //(L5.LevenshteinDistance.StrContains);)
                break;

            case 2:
                ShearhF    = new ShearhFunction(L5.LevenshteinDistance.WagnweFisher);
                ShearhFunc = new Func <string, string, ShearchItemClass>(L5.LevenshteinDistance.WagnweFisher);
                break;

            case 3:
                ShearhF    = new ShearhFunction(L5.LevenshteinDistance.DamerauLevenshteinDistance);
                ShearhFunc = new Func <string, string, ShearchItemClass>(L5.LevenshteinDistance.DamerauLevenshteinDistance);
                break;

            default:
                break;
            }
            int i = 0;
            ShearchItemClass ShearchItem = null;

            foreach (string s in words)
            {
                ShearchItem = ShearhFunc(s, FindString);
                Console.WriteLine("Func     {0} : Строка - {1}, Дистанция - {2}", i, s, ShearchItem.Distance);
                ShearchItem = ShearhF(s, FindString);
                Console.WriteLine("delegate {0} : Строка - {1}, Дистанция - {2}", i, s, ShearchItem.Distance);
                Console.WriteLine();
                i++;
            }

            Console.ReadLine();
        }
Пример #2
0
        private void ShearchStart()
        {
            int EndItem = First + Lenght;
            //int CountUp = 0;
            MyEventThreadFind e = new MyEventThreadFind();

            e.NameThread = NameThread;
            e.Lenght     = Lenght;
            e.First      = First;
            e.EndWork    = false;
            EndWork      = false;
            e.CountUp    = 0;
            e.TimeWork   = 0;

            Stopwatch sw = new Stopwatch();

            sw.Start();

            if (EndItem > ArrayShearch.Count)
            {
                EndItem = ArrayShearch.Count;
            }
            for (int i = First; i < EndItem; i++)
            {
                int    k = i;
                string s = ArrayShearch[k];

                ShearchItemClass ShearchItem = ShearhFunc(s, ShearchString);
                e.CountUp++;
                if (ShearchItem.Distance <= Distance)
                {
                    ShearchItem.IndexItem = k;
                    ResultList.Add(ShearchItem);
                    e.TimeWork    = sw.ElapsedMilliseconds;
                    e.ShearchItem = ShearchItem;
                    e.IndexNow    = k;
                    MyEventThreadFind cc = new MyEventThreadFind();


                    cc.EndWork     = e.EndWork;
                    cc.First       = e.First;
                    cc.IndexNow    = e.IndexNow;
                    cc.Lenght      = e.Lenght;
                    cc.MyThread    = e.MyThread;
                    cc.NameThread  = e.NameThread;
                    cc.ShearchItem = e.ShearchItem;
                    cc.TimeWork    = e.TimeWork;
                    cc.CountUp     = e.CountUp;

                    OneShearchAddNow?.Invoke(cc);
                    e.CountUp = 0;
                    Thread.Sleep(20);
                }
            }
            sw.Stop();
            e.TimeWork = sw.ElapsedMilliseconds;
            e.EndWork  = true;
            EndWork    = true;
            ShearchCompletedNow?.Invoke(ResultList, e);
            Thread.Sleep(100);
        }
Пример #3
0
        private void FindGo_Click(object sender, EventArgs e)
        {
            if (words == null)
            {
                return;
            }
            timer1.Stop();
            stopwatchwork        = new Stopwatch();
            progressBar1.Minimum = 0;
            progressBar1.Maximum = words.Count + 1;
            progressBar1.Value   = 0;
            progressBar1.Visible = true;

            int len = 0;

            LenCol       = 50;
            CountItemsUp = 0;

            stopwatchwork.Start();

            ListData.BeginUpdate();
            ListData.Items.Clear();
            ItemListAdd.Clear();
            ResultTimeStrim = "";
            //ItemListStop.Clear();

            string substring = FindText.Text.ToLower();

            if (FindType.SelectedIndex > 2)
            {
                int k      = Convert.ToInt32(NumStream.Text);
                int Lenght = words.Count / k;

                int CountThread = 0;

                Array.Resize(ref ListThreadFind, k);
                Array.Clear(ListThreadFind, 0, k);

                for (int i = 0; i < words.Count; i = i + Lenght)
                {
                    if (((words.Count - i) % (k - CountThread)) == 0)
                    {
                        Lenght = ((words.Count - i) / (k - CountThread));
                    }
                    ListThreadFind[CountThread] = new MyThreadFind();

                    ListThreadFind[CountThread].OneShearchAddNow    += OneShearchAddOk;
                    ListThreadFind[CountThread].ShearchCompletedNow += ShearchCompletedNow;
                    ListThreadFind[CountThread].NameThread           = " Stream - " + CountThread;
                    if (CountThread == k - 1)
                    {
                        Lenght = words.Count - i;
                    }
                    LogTextBox.AppendText(ListThreadFind[CountThread].NameThread + " c " + i + " по " + (i + Lenght - 1) + " в потоке " + Lenght + " элементов \r\n");
                    ListThreadFind[CountThread].MyThreadIni(words, i, Lenght, substring, FindType.SelectedIndex - 3, Convert.ToInt32(Distance.Text));

                    CountThread++;
                }

                CountThread--;
                timer2.Tag = 0; // счетчик переноса в ListBox
                timer2.Start();
            }
            else
            {
                switch (FindType.SelectedIndex)
                {
                case 0:
                    ShearhFunc = new ShearhFunction(L5.LevenshteinDistance.StrContains);
                    break;

                case 1:
                    ShearhFunc = new ShearhFunction(L5.LevenshteinDistance.WagnweFisher);
                    break;

                case 2:
                    ShearhFunc = new ShearhFunction(L5.LevenshteinDistance.DamerauLevenshteinDistance);
                    break;

                default:
                    break;
                }
                foreach (string s in words)
                {
                    ShearchItemClass ShearchItem = ShearhFunc(s, substring);
                    if (ShearchItem.Distance <= Convert.ToInt32(Distance.Text))
                    {
                        ShearchItem.IndexItem = progressBar1.Value;
                        len = TextRenderer.MeasureText((ListData.Items[ListData.Items.Add(ShearchItem)] as ShearchItemClass).ShearchString, ListData.Font).Width;
                        if (LenCol < len)
                        {
                            LenCol = len + 10;
                        }
                    }
                    progressBar1.Value++;
                }
                progressBar1.Value = progressBar1.Maximum;
                stopwatchwork.Stop();

                TimeWorkStr.Text = "Время поиска " + stopwatchwork.ElapsedMilliseconds + " ms";
                timer1.Start();
            }
            if ((FindType.SelectedIndex == 2) || (FindType.SelectedIndex == 5))
            {
                ListData.Items.Insert(0, "Строка , Редакционное предписание ,  Номер");
            }
            else
            {
                ListData.Items.Insert(0, "Строка ,    ,  Номер");
            }
            ListData.EndUpdate();
        }