Exemple #1
0
        public string ReplaceVariable(string text, PfkGlossaryEntry.NConversionType nConversionType, string pattern)
        {
            StringBuilder buff = new StringBuilder(text);

            this.ReplaceVariable(buff, nConversionType, pattern);

            return(buff.ToString());
        }
        public static PfkGlossaryInfo LoadFromCsv(string path, Encoding enc = null)
        {
            if (enc == null)
            {
                enc = Encoding.UTF8;
            }

            var fileID = Path.GetFileNameWithoutExtension(path);

            using (var reader = new StreamReader(path, enc))
            {
                using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
                {
                    //// 区切り文字
                    csv.Configuration.Delimiter = ",";
                    //// ヘッダーの有無
                    csv.Configuration.HasHeaderRecord = true;
                    //// CSVファイルに合ったマッピングルールを登録
                    csv.Configuration.RegisterClassMap <CsvMapper>();
                    //// データを読み出し
                    var records = csv.GetRecords <FlashCardSheet>();

                    var             errorCount = 0;
                    PfkGlossaryInfo sheet      = new PfkGlossaryInfo();
                    foreach (var record in records)
                    {
                        PfkGlossaryEntry.NConversionType conversionType = PfkGlossaryEntry.NConversionType.None;
                        switch (record.ConversionType)
                        {
                        case "":
                            conversionType = PfkGlossaryEntry.NConversionType.None;
                            break;

                        case "#":
                            conversionType = PfkGlossaryEntry.NConversionType.AlwaysTranslate;
                            break;

                        case "$":
                            conversionType = PfkGlossaryEntry.NConversionType.NounTranslate;
                            break;

                        default:
                            throw new Exception($"Unknown ConversionType({record.ConversionType}).");
                        }

                        PfkGlossaryEntry entry = new PfkGlossaryEntry(conversionType, record.Prefix, record.OriginalText, record.TranslatedText);
                        if (!sheet.AddEntry(entry))
                        {
                            errorCount++;
                        }
                    }

                    if (errorCount > 0)
                    {
                        var msg = $"Duplicated key. errors({errorCount})";
                        Console.WriteLine("*****************************");
                        Console.WriteLine(msg);
                        Console.WriteLine("*****************************");
                        throw new Exception(msg);
                    }

                    return(sheet);
                }
            }
        }
Exemple #3
0
        /// <summary>
        /// 用語集に従いテキストを翻訳する。
        /// </summary>
        /// <param name="buff">文字列のバッファ</param>
        /// <param name="nConversionType">変換タイプ</param>
        /// <param name="pattern">変換パターン</param>
        /// <returns>変換後のテキスト</returns>
        public bool ReplaceVariable(StringBuilder buff, PfkGlossaryEntry.NConversionType nConversionType, string pattern)
        {
            if (string.IsNullOrWhiteSpace(pattern))
            {
                pattern = $@"@.*?@";
            }

            var buffText          = buff.ToString();
            HashSet <string> hash = new HashSet <string>();
            //// テキスト中の変数を抽出する。
            var regEx = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
            var mc    = regEx.Matches(buff.ToString());

            foreach (Match mached in mc)
            {
                //// 抽出されたテキストから変数($で囲まれた文字列)部分を抽出する。
                hash.Add(mached.Value);
            }

            if (hash.Count == 0)
            {
                return(false);
            }

            foreach (var variable in hash)
            {
                var tranclatexNoun = this.GetTranslatedNoun(variable);
                if (string.IsNullOrWhiteSpace(tranclatexNoun))
                {
                    Console.WriteLine($"Undefined noun({variable}).");
                }
                else
                {
                    switch (nConversionType)
                    {
                    case PfkGlossaryEntry.NConversionType.None:
                        var noun = variable.Replace("@", string.Empty);
                        if (noun.Contains("_"))
                        {
                            var splittedNoun = noun.Split('_');
                            noun = splittedNoun[1];
                        }

                        buff.Replace(variable, noun);
                        break;

                    case PfkGlossaryEntry.NConversionType.AlwaysTranslate:
                        buff.Replace(variable, tranclatexNoun);
                        break;

                    case PfkGlossaryEntry.NConversionType.NounTranslate:
                        buff.Replace(variable, tranclatexNoun);
                        break;

                    default:
                        throw new Exception($"Unknown ConversionType({nConversionType}).");
                    }
                }
            }

            return(true);
        }