Esempio n. 1
0
        internal void Start(DicType dicType, string file)
        {
            var processName = "";

            try {
                string            rootDir;
                IDictionaryParser parser;
                WordData          data = null;

                switch (dicType)
                {
                case DicType.Eijiro:
                    rootDir = Constants.EijiroData;
                    parser  = new EijiroParser(file);
                    break;

                case DicType.Webster:
                    rootDir = Constants.WebsterData;
                    parser  = new WebsterParser(file);
                    break;

                default:
                    throw new Exception($"unknown key type : {dicType}");
                }

                // firstly delete files
                Directory.Delete(rootDir, true);
                Directory.CreateDirectory(rootDir);

                // get filename
                var dataFiles = AppUtil.GetKeyList();

                this._callback.OnPrepared(parser.GetRowCount((long rowCount) => {
                    this._callback.OnPrepared(rowCount);
                }));

                FileOperator op        = null;
                string       currentNm = "";
                while ((data = parser.Read()) != null)
                {
                    this._callback.OnProceed(parser.CurrentLine);

                    string nm = AppUtil.ConvertToFileName(data.Word);
                    if (currentNm != nm)
                    {
                        currentNm = nm;
                        op?.Close();
                        op = new FileOperator($@"{rootDir}\{nm}", FileOperator.OpenMode.Write);
                    }
                    op.WriteLine($"{data.Word}\t{this.GetDisplayData(data)}");
                }
                op?.Close();
                this._callback.OnSuccess();
            } catch (Exception ex) {
                this._callback.OnFail(processName + "\n" + ex.Message);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// search dictionary
        /// </summary>
        /// <param name="word">word</param>
        /// <param name="matchType">search matching type</param>
        /// <returns>result. if data does not find, return null</returns>
        internal List <DictionaryData> SearchData(string word, MatchType matchType)
        {
            // create search list
            var nm = AppUtil.ConvertToFileName(word);

            if (nm != this._searchWord)
            {
                this._searchWord = nm;
                foreach (var dir in Constants.DataDirs)
                {
                    if (!this._wordList[dir].ContainsKey(nm))
                    {
                        var file = $@"{dir}\{nm}";
                        if (File.Exists(file))
                        {
                            this._wordList[dir][nm] = new List <DictionaryData>();
                            using (var op = new FileOperator($@"{dir}\{nm}", FileOperator.OpenMode.Read)) {
                                while (!op.Eof)
                                {
                                    var line = op.ReadLine().Split('\t');
                                    var data = new DictionaryData {
                                        Word     = line[0],
                                        WordSort = line[0].ToLower(),
                                        Data     = line[1]
                                    };
                                    this._wordList[dir][nm].Add(data);
                                }
                            }
                        }
                    }
                }
            }

            List <DictionaryData> result = null;

            switch (matchType)
            {
            case MatchType.Exact:
                result = SearchExact(word);
                break;

            case MatchType.Prefix:
                result = SearchPrefix(word);
                break;
            }

            return(result);
        }
Esempio n. 3
0
        /// <summary>
        /// 完全一致検索
        /// </summary>
        /// <param name="word">検索文字列</param>
        /// <returns>検索結果</returns>
        private List <DictionaryData> SearchExact(string word)
        {
            var result   = new List <DictionaryData>();
            var fileName = AppUtil.ConvertToFileName(word);

            foreach (var dir in Constants.DataDirs)
            {
                if (this._wordList[dir].ContainsKey(fileName))
                {
                    foreach (var data in this._wordList[dir][fileName])
                    {
                        if (data.WordSort == word)
                        {
                            result.Add(data);
                            break;
                        }
                    }
                }
            }
            return(result);
        }
Esempio n. 4
0
        /// <summary>
        /// 前方一致検索
        /// </summary>
        /// <param name="word">検索文字列</param>
        /// <returns>検索結果</returns>
        private List <DictionaryData> SearchPrefix(string word)
        {
            int  count;
            bool found;
            var  result   = new List <DictionaryData>();
            var  fileName = AppUtil.ConvertToFileName(word);

            foreach (var dir in Constants.DataDirs)
            {
                found = false;
                count = 0;
                if (this._wordList[dir].ContainsKey(fileName))
                {
                    foreach (var data in this._wordList[dir][_searchWord])
                    {
                        if (data.WordSort.StartsWith(word))
                        {
                            result.Add(data);
                            found = true;
                            count++;
                            if (Constants.MaxNumberOfListWord / 2 < count)
                            {
                                break;
                            }
                        }
                        else
                        {
                            if (found)
                            {
                                break;
                            }
                        }
                    }
                }
            }
            return(result);
        }