Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C# by zzz ( 14 years ago )
using System;
using System.Collections;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;

namespace TestForKontur
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                StreamReader sr = new StreamReader(@"input.txt");
                string buf = sr.ReadToEnd();
                sr.Close();

                //подготовка данных для сохранения
                string wRes = string.Empty;

                //извлечение пользовательских значений для поиска
                ArrayList arrVar = new ArrayList();
                Regex rexVar = new Regex(@"(?<var>[a-zA-Z]+.?)rn");
                MatchCollection mVar = rexVar.Matches(buf);
                for (int i = 0; i < mVar.Count; i++)
                {
                    arrVar.Add(mVar[i].Groups["var"].Value);
                }

                foreach (string val in arrVar)
                {
                    //заполнение массива данными о словах и их частоте встречаемости
                    //поиск похожих слов
                    Regex rex = new Regex(@"b" + val + @"(.+.[0-9]b)");
                    MatchCollection m = rex.Matches(buf);

                    //шаблон для получения значения слова(латинские буквы) и счетчика встречаемости
                    Regex pattern = new Regex(@"(?<word>w+?) (?<dig>.+.?)");

                    //если в словаре есть что то похожее на введеное пользователем
                    if (m.Count != 0)
                    {
                        string result = string.Empty;
                        //массив для хранения результата 
                        //"слово" "счетчик частоты"
                        string[,] sArr = new string[m.Count, 2];
                        for (int i = 0; i < m.Count; i++)
                        {
                            //строка для разбиения (слово-счетчик)
                            result = m[i].Groups[0].Value;
                            //поиск по шаблону
                            MatchCollection mVal = pattern.Matches(result);
                            sArr[i, 0] = mVal[0].Groups["word"].Value;//string value
                            sArr[i, 1] = mVal[0].Groups["dig"].Value;//counter
                        }

                        //сортировка результата по убыванию частоты(метод пузырика)
                        for (int i = m.Count - 1; i > 0; i--)
                        {
                            for (int j = 0; j < i; j++)
                            {
                                if (int.Parse(sArr[i, 1]) > int.Parse(sArr[j, 1]))
                                {
                                    int tmp = int.Parse(sArr[i, 1]);
                                    string strTmp = sArr[i, 0];

                                    sArr[i, 1] = sArr[j, 1];
                                    sArr[i, 0] = sArr[j, 0];

                                    sArr[j, 1] = tmp.ToString();
                                    sArr[j, 0] = strTmp;
                                }
                            }
                        }
                        //если значений найдено больше одного
                        if (m.Count > 1)
                        {
                            //упорядочить по алфавиту, если счетчики одинаковые
                            //выбор строк с одинаковым значением счетчиков
                            ArrayList arr = new ArrayList();

                            //значение счетчика если есть повторения
                            string tmpСounter = string.Empty;

                            //ограничение количества если больше 10 то ограничиваем
                            int kol = 10 - 1;
                            //если меньше то берем текущее количество элементов
                            if (m.Count < 10)
                            {
                                kol = m.Count - 1;
                            }

                            //только первые 10 значений
                            for (int i = 0; i < kol - 1; i++)
                            {
                                if (sArr[i, 1] == sArr[i + 1, 1])
                                {
                                    //установка нового значения счетчика
                                    if (tmpСounter == string.Empty | tmpСounter != sArr[i, 1])
                                    {
                                        tmpСounter = sArr[i, 1];
                                        //заполнение временного массива 
                                        for (int j = i; j < kol; j++)
                                        {
                                            if (sArr[j, 1] == tmpСounter)
                                                arr.Add(sArr[j, 0]);
                                        }
                                        //сортировка массива в алфавитном порядке
                                        arr.Sort();
                                        //заполнение основного массива упорядочеными значениями
                                        for (int p = 0; p < arr.Count; p++)
                                        {
                                            sArr[i + p, 0] = arr[p].ToString();
                                        }
                                        //очищаем массив от утсаревших данных
                                        arr.Clear();
                                    }
                                }
                            }
                        }

                        //количество элементов в массиве, если больше 10 
                        //то выводим только 10 первых
                        int kolEl = m.Count;
                        if (m.Count > 10)
                        {
                            kolEl = 10;
                        }

                        //подготовка данных для сохранения
                        for (int i = 0; i < kolEl; i++)
                        {
                            wRes += "" + sArr[i, 0] + "rn";
                        }
                        wRes += "rn";                        
                    }
                    //если слова нет в словаре
                    else
                    {
                        wRes += "-rn";
                    }

                }
                //сохранить результат в файл
                StreamWriter sw = new StreamWriter(@"output.txt");
                sw.WriteLine(wRes);
                sw.Close();
                wRes = string.Empty;
            }
            //вывод сообщения о возникших ошибках
            catch (Exception exp)
            {
                Console.WriteLine(exp.Message);
                Console.ReadLine();
            }
        }        
    }
}

 

Revise this Paste

Your Name: Code Language: