Beispiel #1
0
        private void buttonSeach_Click(object sender, EventArgs e)
        {
            string word = this.textBoxFind.Text.Trim();             //введенное слово для поиска

            if (!string.IsNullOrWhiteSpace(word) && list.Count > 0) //если слово не пустое
            {
                int kol;
                if (!int.TryParse(this.TextBoxKol.Text.Trim(), out kol))
                {
                    MessageBox.Show("Необходимо указать максимальное расстояние");
                    return;
                }

                if (kol < 1 || kol > 5)
                {
                    MessageBox.Show("Масксимальное расстояние должно быть больше 1 и меньше 5");
                    return;
                }

                string        wordUp   = word.ToUpper();      //перевели в верхний регистр
                List <string> tempList = new List <string>(); //пустой массив для найденных слов

                Stopwatch t = new Stopwatch();
                t.Start(); //начали отсчет



                foreach (string i in list)
                {
                    if (EditDistance.Distance(i.ToUpper(), wordUp) <= kol) // если растояние меньше указанного, то

                    {
                        tempList.Add(i); //записываем во временный список
                    }
                }



                t.Stop();
                this.labelTime2.Text = (t.ElapsedTicks * 0.0001).ToString();
                this.listBoxResults.Items.Clear(); //очистили список (чтоб не показывал предыдущие результаты)

                this.listBoxResults.BeginUpdate();

                foreach (string i in tempList)
                {
                    this.listBoxResults.Items.Add(i);
                }

                this.listBoxResults.EndUpdate();
            }

            else
            {
                MessageBox.Show("Нужно ввести слово для поиска");
            }
        }
Beispiel #2
0
        public static List <ParallelSearchResult> ArrayThreadTask(object paramObj)
        {
            ParallelSearchThreadParam param = (ParallelSearchThreadParam)paramObj;
            string wordUpper = param.wordPattern.Trim().ToUpper();
            List <ParallelSearchResult> Result = new List <ParallelSearchResult>();

            foreach (string str in param.tempList)
            {
                int dist = EditDistance.Distance(str.ToUpper(), wordUpper);
                if (dist <= param.maxDist)
                {
                    ParallelSearchResult temp = new ParallelSearchResult()
                    {
                        word      = str,
                        dist      = dist,
                        ThreadNum = param.ThreadNum
                    };
                    Result.Add(temp);
                }
            }
            return(Result);
        }
Beispiel #3
0
        private void buttonLevenshteinDist_Click(object sender, EventArgs e)
        {
            //Слово для поиска
            string word = this.textBoxFind.Text.Trim();

            //Если слово для поиска не пусто
            if (!string.IsNullOrWhiteSpace(word) && list.Count > 0)
            {
                int maxDist;
                if (!int.TryParse(this.textBoxmaxDist.Text.Trim(), out maxDist))
                {
                    MessageBox.Show("Необходимо указать максимальное расстояние");
                    return;
                }

                if (maxDist < 1 || maxDist > 5)
                {
                    MessageBox.Show("Максимальное расстояние должно быть в диапазоне от 1 до 5");
                    return;
                }

                //Подтягиваем буквы вверх, чтобы не было проблем с регистром
                word = word.ToUpper();

                //запуск листбокса
                this.listBoxResult1.BeginUpdate();
                this.listBoxResult1.Items.Clear();
                Stopwatch timer = new Stopwatch();


                if (!string.IsNullOrWhiteSpace(word) && list.Count > 0)
                {
                    //Проверка на случай отсутствия совпадений
                    bool NoMatches = true;
                    //запуск таймера
                    timer.Start();
                    foreach (string w in list)
                    {
                        //идёт проверка слов в верхнем регистре
                        if (EditDistance.Distance(w.ToUpper(), word) <= maxDist)
                        {
                            this.listBoxResult1.Items.Add(w);
                            NoMatches = false;
                        }
                    }
                    //остановка таймера
                    timer.Stop();
                    //Если совпадений всё же не нашлось
                    if (NoMatches)
                    {
                        this.listBoxResult1.Items.Add("Нет сопадений");
                    }
                }
                else
                {
                    MessageBox.Show("Необходимо отрыть файл и выбрать слово для поиска");
                }

                this.listBoxResult1.EndUpdate();
                //запись даных из таймера
                this.textBoxParallTime.Text = timer.Elapsed.ToString();
            }
        }