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(); }
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); }
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(); }