예제 #1
0
        public static void Test_RegexValues(IEnumerable <XElement> elements, string input)
        {
            Trace.WriteLine("\"{0}\" : ", input);
            RegexValuesList rvs = new RegexValuesList(elements);
            //FindText_old findText = rvs.Find_old(input);
            FindText findText = rvs.Find(input);

            if (findText.Found)
            {
                //NamedValues<ZValue> values = findText.regexValues.GetValues_old();
                NamedValues <ZValue> values = findText.matchValues.GetValues();
                //Trace.WriteLine("  found \"{0}\" {1} values", findText.regexValues.Name, values.Count);
                Trace.WriteLine("  found \"{0}\" {1} values", findText.matchValues.Name, values.Count);
                foreach (KeyValuePair <string, ZValue> value in values)
                {
                    if (value.Value is ZStringArray)
                    {
                        Trace.WriteLine("  value {0} = [{1}] {2}", value.Key, ((string[])value.Value).Length, ((string[])value.Value).zToStringValues(s => "\"" + s.zToStringOrNull() + "\""));
                    }
                    else
                    {
                        Trace.WriteLine("  value {0} = \"{1}\"", value.Key, value.Value.zToStringOrNull());
                    }
                }
            }
            else
            {
                Trace.WriteLine("  not found");
            }
            Trace.WriteLine();
        }
예제 #2
0
        public static void Test2(RegexValuesList regexValuesList, string text, bool contiguous = false)
        {
            Trace.WriteLine("Input     : {0}", text);
            //FindText findText = regexValuesList.Find(text);
            FindText_v2 findText = regexValuesList.Find(text);

            if (!findText.Success)
            {
                Trace.WriteLine("Result           : not found");
                return;
            }
            while (findText.Success)
            {
                Trace.Write($"found \"{findText.Text}\" position {findText.Match.Index + 1} length {findText.Match.Length}");
                NamedValues <ZValue> values = findText.GetValues();
                if (values.Count > 0)
                {
                    Trace.Write(" values");
                    foreach (KeyValuePair <string, ZValue> value in findText.GetValues())
                    {
                        Trace.Write($" \"{value.Key}\" = \"{value.Value}\"");
                    }
                }
                if (findText.Attributes.Count > 0)
                {
                    Trace.Write(" attributes");
                    foreach (KeyValuePair <string, string> attribute in findText.Attributes)
                    {
                        Trace.Write($" \"{attribute.Key}\" = \"{attribute.Value}\"");
                    }
                }
                Trace.WriteLine();
                findText.FindNext(contiguous);
            }
        }
예제 #3
0
        public IEnumerable <TextData> Read(IEnumerable <string> files)
        {
            foreach (string file in files)
            {
                int lineNumber = 1;
                //Trace.WriteLine($"read file \"{file}\"");
                foreach (string line in zFile.ReadLines(file))
                {
                    FindText_v2 findText = _regexList.Find(line, contiguous: _contiguousSearch);
                    // Values = findText.GetValues()
                    yield return(new TextData {
                        File = file, Filename = zPath.GetFileName(file), ColumnNumber = findText.Success ? findText.MatchIndex + 1 : 0,
                        LineNumber = lineNumber, Length = findText.MatchLength, Line = line, Values = findText.GetRegexValues()
                    });

                    while (findText.FindNext(contiguous: _contiguousSearch))
                    {
                        // Values = findText.GetValues()
                        yield return(new TextData {
                            File = file, Filename = zPath.GetFileName(file), ColumnNumber = findText.Success ? findText.MatchIndex + 1 : 0,
                            LineNumber = lineNumber, Length = findText.MatchLength, Line = line, Values = findText.GetRegexValues()
                        });
                    }
                    lineNumber++;
                }
            }
        }
예제 #4
0
        public static void Test(RegexValuesList regexValuesList, string text)
        {
            Trace.WriteLine("Input     : {0}", text);
            FindText findText = regexValuesList.Find(text);
            if (!findText.Found)
                Trace.WriteLine("Result           : not found");
            else
            {
                Trace.WriteLine("Result           : found");
                Trace.WriteLine("  Text           : \"{0}\"", findText.Text);
                Trace.WriteLine("  Key            : \"{0}\"", findText.matchValues.Key);
                Trace.WriteLine("  Name           : \"{0}\"", findText.matchValues.Name);
                Trace.WriteLine("  Pattern        : \"{0}\"", findText.matchValues.Pattern);

                Trace.WriteLine("  Attributes     : {0}", findText.matchValues.Attributes.Count);
                foreach (KeyValuePair<string, string> attribute in findText.matchValues.Attributes)
                    Trace.WriteLine("    Attribute  : \"{0}\" = \"{1}\"", attribute.Key, attribute.Value);

                NamedValues<ZValue> values = findText.matchValues.GetValues();
                Trace.WriteLine("  GetValues()    : {0}", findText.matchValues.Attributes.Count);
                foreach (KeyValuePair<string, ZValue> value in values)
                    Trace.WriteLine("    Value      : \"{0}\" = \"{1}\"", value.Key, value.Value);

                values = findText.matchValues.GetAllValues();
                Trace.WriteLine("  GetAllValues() : {0}", findText.matchValues.Attributes.Count);
                foreach (KeyValuePair<string, ZValue> value in values)
                    Trace.WriteLine("    AllValue   : \"{0}\" = {1}", value.Key, value.Value);
            }
        }
예제 #5
0
        //public static void Test_FindInFile_01(string file)
        //{
        //    //RegexValuesList regexList = new RegexValuesList(XmlConfig.CurrentConfig.GetElements("QuestionInfos/QuestionInfo"), compileRegex: true);
        //    RegexValuesList regexList = QuestionRun.GetQuestionRegexValuesList();
        //    foreach (string line in zFile.ReadLines(file))
        //    {
        //        string line2 = line.Trim();
        //        if (line2 == "")
        //            continue;
        //        Trace.WriteLine($"read : \"{line2}\"");
        //        FindText findText = regexList.Find(line2);
        //        if (findText.Found)
        //        {
        //            foreach (KeyValuePair<string, ZValue> namedValue in findText.matchValues.GetValues())
        //                Trace.WriteLine($"  found : {namedValue.Key} = \"{namedValue.Value}\"");
        //        }
        //        else
        //        {
        //            Trace.WriteLine($"  unknow text");
        //        }
        //    }
        //}

        public static void Test_Find_02(string text, RegexValuesList regexList)
        {
            Trace.WriteLine($"text : \"{text}\"");
            FindText_v2 findText = regexList.Find(text);

            if (findText.Success)
            {
                //MatchValues matchValues = findText.matchValues;
                while (findText.Success)
                {
                    Trace.WriteLine();
                    Trace.WriteLine($"  found : index {findText.Match.Index} length {findText.Match.Length}");
                    foreach (KeyValuePair <string, ZValue> namedValue in findText.GetValues())
                    {
                        Trace.WriteLine($"        : {namedValue.Key} = \"{namedValue.Value}\"");
                    }
                    //matchValues = matchValues.Next();
                    findText.Next();
                }
            }
            else
            {
                Trace.WriteLine($"  unknow text");
            }
        }
예제 #6
0
        public static NamedValues <ZValue> Test_Find_01(string text, RegexValuesList regexList)
        {
            Trace.WriteLine($"text : \"{text}\"");
            //RegexValuesList regexList = new RegexValuesList(XmlConfig.CurrentConfig.GetElements("QuestionInfos/QuestionInfo"), compileRegex: true);
            //FindText findText = QuestionRun.GetQuestionRegexValuesList().Find(text);
            FindText_v2 findText = regexList.Find(text);

            Trace.WriteLine($"found : {findText.Success}");
            return(findText.GetAllValues());
        }
예제 #7
0
        public Print1 Find0(string filename, out string error)
        {
            error = null;
            if (_trace)
            {
                Trace.CurrentTrace.WriteLine("search \"{0}\"", filename);
            }
            //FindText_old findText = _printRegexList.Find_old(filename);
            FindText findText = _printRegexList.Find(filename);

            if (!findText.Found)
            {
                if (_trace)
                {
                    Trace.CurrentTrace.WriteLine("print not found \"{0}\"", filename);
                }
                return(null);
            }
            //Print1 print = Get(findText.regexValues.Name);
            Print1 print = Get(findText.matchValues.Name);
            //NamedValues<ZValue> values = findText.regexValues.GetValues_old();
            NamedValues <ZValue> values = findText.matchValues.GetValues();

            if (_trace)
            {
                bool first = true;
                foreach (KeyValuePair <string, ZValue> value in values)
                {
                    if (!first)
                    {
                        Trace.CurrentTrace.Write(", ");
                    }
                    first = false;
                    Trace.CurrentTrace.Write("{0}={1}", value.Key, value.Value);
                }
                Trace.CurrentTrace.WriteLine();
            }
            if (!print.TrySetValues(values))
            {
                error = string.Format("find \"{0}\" error \"{1}\"", print.Name, values.Error);
                return(null);
            }
            return(print);
        }
예제 #8
0
        private BonusDirectoryInfo GetBonusDirectoryInfo(string directory)
        {
            //FindText findText = _bonusDirectories.Find(zPath.GetFileName(directory));
            FindText_v2 findText = _bonusDirectories.Find(zPath.GetFileName(directory));

            if (findText.Success)
            {
                string bonusDirectory = findText.GetAttribute("directory");
                return(new BonusDirectoryInfo {
                    IsBonusDirectory = true, Directory = bonusDirectory
                });
            }
            else
            {
                return new BonusDirectoryInfo {
                           IsBonusDirectory = false
                }
            };
        }
예제 #9
0
        public static void Test_FindInFile_01(string file, RegexValuesList regexList)
        {
            //RegexValuesList regexList = QuestionRun.GetResponseRegexValuesList();
            int lineNumber = 0;

            foreach (string line in zFile.ReadLines(file))
            {
                //string line2 = line.Trim();
                //if (line2 == "")
                //    continue;

                lineNumber++;
                if (line == "")
                {
                    continue;
                }

                Trace.WriteLine();
                Trace.WriteLine($"read : line {lineNumber} \"{line}\"");
                FindText_v2 findText = regexList.Find(line);
                if (findText.Success)
                {
                    //MatchValues matchValues = findText.matchValues;
                    while (findText.Success)
                    {
                        Trace.WriteLine();
                        Trace.WriteLine($"  found : index {findText.Match.Index} length {findText.Match.Length}");
                        foreach (KeyValuePair <string, ZValue> namedValue in findText.GetValues())
                        {
                            Trace.WriteLine($"        : {namedValue.Key} = \"{namedValue.Value}\"");
                        }
                        //matchValues = matchValues.Next();
                        findText.Next();
                    }
                }
                else
                {
                    Trace.WriteLine($"  unknow text");
                }
            }
        }
예제 #10
0
        public static void Test(RegexValuesList regexValuesList, string text)
        {
            Trace.WriteLine("Input     : {0}", text);
            //FindText findText = regexValuesList.Find(text);
            FindText_v2 findText = regexValuesList.Find(text);

            if (!findText.Success)
            {
                Trace.WriteLine("Result           : not found");
            }
            else
            {
                Trace.WriteLine("Result           : found");
                Trace.WriteLine("  Text           : \"{0}\"", findText.Text);
                Trace.WriteLine("  Key            : \"{0}\"", findText.Key);
                Trace.WriteLine("  Name           : \"{0}\"", findText.Name);
                Trace.WriteLine("  Pattern        : \"{0}\"", findText.Pattern);

                Trace.WriteLine("  Attributes     : {0}", findText.Attributes.Count);
                foreach (KeyValuePair <string, string> attribute in findText.Attributes)
                {
                    Trace.WriteLine("    Attribute  : \"{0}\" = \"{1}\"", attribute.Key, attribute.Value);
                }

                NamedValues <ZValue> values = findText.GetValues();
                Trace.WriteLine("  GetValues()    : {0}", values.Count);
                foreach (KeyValuePair <string, ZValue> value in values)
                {
                    Trace.WriteLine("    Value      : \"{0}\" = \"{1}\"", value.Key, value.Value);
                }

                values = findText.GetAllValues();
                Trace.WriteLine("  GetAllValues() : {0}", values.Count);
                foreach (KeyValuePair <string, ZValue> value in values)
                {
                    Trace.WriteLine("    AllValue   : \"{0}\" = {1}", value.Key, value.Value);
                }
            }
        }
예제 #11
0
        public IEnumerable <Question> Read(IEnumerable <string> files, string baseDirectory = null)
        {
            //Trace.WriteLine("read questions files");

            if (_maxLinesPerQuestion == -1)
            {
                throw new PBException("undefined MaxLinesPerQuestion");
            }
            if (_maxLinesPerChoice == -1)
            {
                throw new PBException("undefined MaxLinesPerResponse");
            }

            _baseDirectory = baseDirectory;

            foreach (string file in files)
            {
                _file     = file;
                _filename = zPath.GetFileName(_file);
                //_year = null;
                //_questionType = QuestionType.None;
                _lastValueType = QuestionValueType.None;
                _question      = null;
                _lineNumber    = 0;
                int emptyLineCount = 0;
                _endOfPage = false;

                if (_trace)
                {
                    Trace.WriteLine($"read question file \"{file}\"");
                }

                foreach (string line in zFile.ReadLines(file))
                {
                    _lineNumber++;
                    string line2 = line.Trim();
                    if (line2 == "")
                    {
                        //if (_lastValueType == QuestionValueType.Response)
                        if (_lastValueType == QuestionValueType.Response || (_associationQuestion != null && _associationQuestion.Complete && _lastValueType == QuestionValueType.Question))
                        {
                            if (_question != null)
                            {
                                //if (!_newVersion)
                                //    yield return new Question { Year = _question.Year, Type = _question.Type, Number = _question.Number, QuestionText = _question.QuestionText, Choices = _question.Choices.ToArray(),
                                //        SourceFile = _question.SourceFile, SourceLine = _question.SourceLine };
                                //else
                                yield return(GetQuestion());

                                _question = null;
                            }
                            else if (_associationQuestion != null)
                            {
                                _associationQuestion.Complete = true;
                            }
                            _lastValueType = QuestionValueType.None;
                        }

                        if (++emptyLineCount == _maxEmptyLine)
                        {
                            _endOfPage = true;
                        }

                        continue;
                    }

                    emptyLineCount = 0;

                    //FindText_v2 findText = _regexList.Find(line2);
                    FindText_v2 findText = _regexList.Find(line);
                    if (findText.Success)
                    {
                        bool          newQuestion = false;
                        QuestionTmp   question    = null;
                        QuestionValue value       = GetQuestionValue(findText.GetValues());
                        if (_trace)
                        {
                            Trace.WriteLine($"  line {_lineNumber} - {value}");
                        }
                        switch (value.Type)
                        {
                        case QuestionValueType.Year:
                            newQuestion          = true;
                            _year                = ((QuestionValueYear)value).Year;
                            _associationQuestion = null;
                            break;

                        case QuestionValueType.QuestionType:
                            newQuestion          = true;
                            _questionType        = ((QuestionValueQuestionType)value).QuestionType;
                            _associationQuestion = null;
                            break;

                        case QuestionValueType.QuestionNumber:
                            newQuestion = true;
                            if (_year == null)
                            {
                                throw new PBFileException($"unknow year, line {_lineNumber} file \"{_filename}\"", _file, _lineNumber);
                            }
                            //string sourceFile = _file;
                            //if (baseDirectory != null && sourceFile.StartsWith(baseDirectory))
                            //{
                            //    int l = baseDirectory.Length;
                            //    if (sourceFile[l] == '\\')
                            //        l++;
                            //    sourceFile = sourceFile.Substring(l);
                            //}
                            question = new QuestionTmp {
                                Year = (int)_year, Type = _questionType, Number = ((QuestionValueQuestionNumber)value).QuestionNumber,
                                QuestionLineCount = 0, SourceFile = GetSubPath(_file), SourceLine = _lineNumber
                            };
                            if (_associationQuestion != null)
                            {
                                _associationQuestion.Complete = true;
                            }
                            break;

                        case QuestionValueType.Response:
                            //if (_question == null)
                            //    throw new PBFileException($"unknow question, line {_lineNumber} file \"{_filename}\"", _file, _lineNumber);
                            //AddResponse(_question, (QuestionValueResponse)value);
                            AddResponse((QuestionValueResponse)value);
                            break;

                        case QuestionValueType.None:
                            _TraceUnknowValue(line2);
                            break;

                        default:
                            throw new PBFileException($"wrong value \"{line2}\" line {_lineNumber} file \"{_filename}\"", _file, _lineNumber);
                        }
                        if (newQuestion)
                        {
                            if (_question != null)
                            {
                                //yield return new Question { Year = _question.Year, Type = _question.Type, Number = _question.Number, QuestionText = _question.QuestionText, Responses = _question.Responses.ToArray() };
                                yield return(GetQuestion());
                            }
                            _question = question;
                        }
                        _lastValueType = value.Type;
                    }
                    else
                    {
                        if (_trace)
                        {
                            Trace.WriteLine($"  line {_lineNumber} - text - {line2}");
                        }
                        switch (_lastValueType)
                        {
                        case QuestionValueType.QuestionNumber:
                            _question.QuestionText = line2;
                            _question.QuestionLineCount++;
                            _lastValueType = QuestionValueType.Question;
                            break;

                        case QuestionValueType.Question:
                            //if (_question.QuestionLineCount > _maxLinesPerQuestion - 1)
                            //    throw new PBFileException($"to many lines for question \"{line2}\" line {_lineNumber} file \"{_filename}\"", _file, _lineNumber);
                            //_question.QuestionText += " " + line2;
                            //_question.QuestionLineCount++;
                            AddQuestion(line2);
                            break;

                        case QuestionValueType.Response:
                            //if (_question.ResponseLineCount > 1)
                            //    throw new PBFileException($"to many lines for response \"{line2}\" line {_lineNumber} file \"{_filename}\"", _file, _lineNumber);
                            //int i = _question.Responses.Count - 1;
                            //_question.Responses[i] += " " + line2;
                            //_question.ResponseLineCount++;
                            AddResponse(line2);
                            break;

                        case QuestionValueType.None:
                            _TraceUnknowValue(line2);
                            break;

                        default:
                            if (_lastValueType == QuestionValueType.QuestionType && _questionType == QuestionType.Association && _manageAssociationQuestion)
                            {
                                _associationQuestion = new QuestionAssociationTmp {
                                    Type = QuestionType.Association, QuestionText = line2, QuestionLineCount = 1, Complete = false
                                };
                                _lastValueType = QuestionValueType.Question;
                            }
                            //else if (_year != null)
                            //    throw new PBFileException($"wrong value \"{line2}\" line {_lineNumber} file \"{_filename}\"", _file, _lineNumber);
                            else
                            {
                                _TraceUnknowValue(line2);
                            }
                            break;
                        }
                    }
                }
                if (_question != null)
                {
                    //yield return new Question { Year = _question.Year, Type = _question.Type, Number = _question.Number, QuestionText = _question.QuestionText, Responses = _question.Responses.ToArray() };
                    yield return(GetQuestion());
                }
            }
        }
예제 #12
0
        //private PrintTitleInfo _GetPrintTitleInfo_v1(string title)
        //{
        //    PrintTitleInfo titleInfo = new PrintTitleInfo();
        //    titleInfo.originalTitle = title;
        //    string titleStructure = title;

        //    FindText findSpecial = _findSpecial.Find(titleStructure);
        //    if (findSpecial.found)
        //    {
        //        titleInfo.special = true;
        //        titleInfo.specialMatch = findSpecial.matchValues;
        //        titleStructure = findSpecial.matchValues.Replace(" $$special$$ ");
        //    }

        //    FindNumber findNumber = _findNumber.Find(titleStructure);
        //    if (findNumber.found)
        //    {
        //        titleInfo.number = findNumber.number;
        //        titleInfo.numberMatch = findNumber.matchValues;
        //        titleStructure = findNumber.matchValues.Replace(" $$number$$ ");
        //    }

        //    FindDate findDate = _findDateManager_v1.Find(titleStructure);
        //    if (findDate.found)
        //    {
        //        titleInfo.date = findDate.date;
        //        titleInfo.dateType = findDate.dateType;
        //        titleInfo.dateMatch = findDate.matchValues;
        //        titleStructure = findDate.matchValues.Replace(" $$date$$ ");
        //    }
        //    titleInfo.dateOtherMatchList = findDate.matchValuesList;

        //    Match match = __rgSpecialLabel.Match(titleStructure);
        //    if (match.Success)
        //    {
        //        titleInfo.specialText = match.Groups[1].Value.Trim(__trimChars);
        //        titleInfo.specialText = GetFormatedText(titleInfo.specialText);
        //        titleStructure = match.zReplace(titleStructure, "");
        //    }

        //    int i = titleStructure.IndexOf("$$");
        //    if (i != -1)
        //    {
        //        titleInfo.title = titleStructure.Substring(0, i).Trim(__trimChars);
        //        titleStructure = titleStructure.Substring(i);
        //    }
        //    else
        //        titleInfo.title = titleStructure;

        //    titleInfo.titleStructure = titleStructure;
        //    titleInfo.formatedTitle = GetFormatedText(titleInfo.title);
        //    titleInfo.name = GetName(titleInfo.formatedTitle);
        //    titleInfo.remainText = __rgTitleStructureName.Replace(titleStructure, "").Trim(__trimChars);

        //    titleInfo.file = GetFile(titleInfo);

        //    return titleInfo;
        //}

        /// not used
        //private PrintTitleInfo _GetPrintTitleInfo_v2(string title)
        //{
        //    PrintTitleRequest titleRequest = new PrintTitleRequest();

        //    titleRequest.originalTitle = title;

        //    PrintSplitedTitle splitedTitle = SplitTitle(title);

        //    FindText findSpecial = _findSpecial.Find(splitedTitle.titlePart1);
        //    if (findSpecial.found)
        //    {
        //        titleRequest.special = true;
        //        splitedTitle.titlePart1 = findSpecial.matchValues.Replace(" $$special$$ ");
        //    }

        //    FindNumber findNumber = _findNumber.Find(splitedTitle.titlePart1);
        //    if (findNumber.found)
        //    {
        //        titleRequest.number = findNumber.number;
        //        splitedTitle.titlePart1 = findNumber.matchValues.Replace(" $$number$$ ");
        //    }

        //    FindDate findDate = _findDateManager_new.Find(splitedTitle.titlePart2);
        //    if (findDate.found)
        //    {
        //        titleRequest.date = findDate.date;
        //        titleRequest.dateType = findDate.dateType;
        //        splitedTitle.titlePart2 = findDate.matchValues.Replace(" $$date$$ ");
        //    }

        //    Match match = __rgSpecialLabel.Match(splitedTitle.titlePart1);
        //    if (match.Success)
        //    {
        //        titleRequest.specialText = match.Groups[1].Value.Trim(__trimChars);
        //        titleRequest.specialText = GetFormatedText(titleRequest.specialText);
        //        splitedTitle.titlePart1 = match.zReplace(splitedTitle.titlePart1, "");
        //    }

        //    //Trace.WriteLine("titleRequest :");
        //    //Trace.WriteLine(titleRequest.zToJson());
        //    //Trace.WriteLine("splitedTitle :");
        //    //Trace.WriteLine(splitedTitle.zToJson());

        //    string concatenatedTitle = splitedTitle.titlePart1;
        //    if (!string.IsNullOrEmpty(splitedTitle.realTitlePart2))
        //        concatenatedTitle += " - " + splitedTitle.realTitlePart2;
        //    int i = concatenatedTitle.IndexOf("$$");
        //    if (i != -1)
        //    {
        //        titleRequest.title = concatenatedTitle.Substring(0, i).Trim(__trimChars);
        //        concatenatedTitle = concatenatedTitle.Substring(i);
        //    }
        //    else
        //    {
        //        titleRequest.title = concatenatedTitle;
        //        concatenatedTitle = null;
        //    }

        //    titleRequest.titleStructure = concatenatedTitle;
        //    titleRequest.formatedTitle = GetFormatedText(titleRequest.title);
        //    titleRequest.name = GetName(titleRequest.formatedTitle);
        //    if (concatenatedTitle != null)
        //        titleRequest.remainText = __rgTitleStructureName.Replace(concatenatedTitle, "").Trim(__trimChars);

        //    titleRequest.file = GetFile(titleRequest);

        //    PrintTitleInfo titleInfo = new PrintTitleInfo
        //        {
        //            originalTitle = titleRequest.originalTitle,
        //            title = titleRequest.title,
        //            formatedTitle = titleRequest.formatedTitle,
        //            name = titleRequest.name,
        //            special = titleRequest.special,
        //            specialText = titleRequest.specialText,
        //            number = titleRequest.number,
        //            date = titleRequest.date,
        //            dateType = titleRequest.dateType,
        //            titleStructure = titleRequest.titleStructure,
        //            remainText = titleRequest.remainText,
        //            file = titleRequest.file
        //        };
        //    return titleInfo;
        //}

        /// new split
        private PrintTitleInfo _GetPrintTitleInfo(string title, bool splitTitle, Date?expectedDate)
        {
            // pourquoi split :
            //     "Le Parisien + Votre été du dimanche 24 août 2014"                               date = "été du dimanche 24 août 2014"
            //     "Le Parisien + Votre été du dimanche 24 août 2014"                               date = "été du dimanche 24 août 2014"
            //     "Le Parisien + Votre été (la France en fête) du dimanche 20 juillet 2014"        date = "été"
            //     "Le Monde + Eco&Entreprise + journal de 1994 du mardi 08 avril 2014"             date = "de 1994"
            //     "Le Monde de l'Image 84  - 2013"                                                 date not found
            //     "Le Monde de L'Intelligence 29 - Février-Mars 2013"                              date not found
            //     "Le Monde des Sciences 7 - Février-Mars 2013"                                    date = "7 - Février-Mars 2013"

            PrintTitleRequest titleRequest = new PrintTitleRequest();

            titleRequest.OriginalTitle = title;

            title = ReplaceCharacters(title);

            // new le 11/08/2015
            //title = GetFormatedText(title);

            bool foundDate = false;

            if (splitTitle)
            {
                // split d'abord avec "du" puis avec "-"
                int i1 = title.LastIndexOf(" du ", StringComparison.InvariantCultureIgnoreCase);
                int i2 = title.LastIndexOf("- ");
                int i3 = Math.Max(i1, i2);
                if (i3 != -1)
                {
                    string title1 = title.Substring(0, i3);
                    string title2 = title.Substring(i3);

                    FindDate findDate = _findDateManager.Find(title2, expectedDate);
                    if (findDate.Found)
                    {
                        titleRequest.Date      = findDate.Date;
                        titleRequest.DateType  = findDate.DateType;
                        titleRequest.DateMatch = findDate.matchValues;
                        title2    = findDate.matchValues.Replace(" $$date$$ ");
                        title     = title1 + title2;
                        foundDate = true;
                    }
                    //titleRequest.DateOtherMatchList = findDate.matchValuesList;
                }

                if (!foundDate)
                {
                    // puis split avec "-"
                    i3 = Math.Min(i1, i2);
                    i3 = title.IndexOf("- ");
                    if (i3 != -1)
                    {
                        // attention i + 1 pour garder un espace en début de chaine
                        //return new PrintSplitedTitle(title.Substring(0, i), title.Substring(i + 1));

                        string title1 = title.Substring(0, i3);
                        string title2 = title.Substring(i3);

                        FindDate findDate = _findDateManager.Find(title2, expectedDate);
                        if (findDate.Found)
                        {
                            titleRequest.Date      = findDate.Date;
                            titleRequest.DateType  = findDate.DateType;
                            titleRequest.DateMatch = findDate.matchValues;
                            title2    = findDate.matchValues.Replace(" $$date$$ ");
                            title     = title1 + title2;
                            foundDate = true;
                        }
                        //titleRequest.DateOtherMatchList = findDate.matchValuesList;
                    }
                }
            }

            //FindText findSpecial = _findSpecial.Find(title);
            FindText_v2 findSpecial = _findSpecial.Find(title);

            if (findSpecial.Success)
            {
                titleRequest.Special = true;
                //titleRequest.SpecialMatch = findSpecial.matchValues;
                //title = findSpecial.matchValues.Replace(" $$special$$ ");
                title = findSpecial.Replace(" $$special$$ ");
            }

            FindNumber findNumber = _findNumberManager.Find(title);

            if (findNumber.found)
            {
                titleRequest.Number      = findNumber.number;
                titleRequest.NumberMatch = findNumber.matchValues;
                title = findNumber.matchValues.Replace(" $$number$$ ");
            }

            if (!foundDate)
            {
                FindDate findDate = _findDateManager.Find(title, expectedDate);
                //Trace.WriteLine("PrintTitleManager._GetPrintTitleInfo() : _findDateManager.Find(\"{0}\")", title);
                //Trace.WriteLine(findDate.zToJson());
                if (findDate.Found)
                {
                    titleRequest.Date      = findDate.Date;
                    titleRequest.DateType  = findDate.DateType;
                    titleRequest.DateMatch = findDate.matchValues;
                    title = findDate.matchValues.Replace(" $$date$$ ");
                }
                //titleRequest.DateOtherMatchList = findDate.matchValuesList;
            }

            Match match = __rgSpecialLabel.Match(title);

            if (match.Success)
            {
                titleRequest.SpecialText = match.Groups[1].Value.Trim(__trimChars);
                titleRequest.SpecialText = GetFormatedText(titleRequest.SpecialText);
                title = match.zReplace(title, "");
            }

            //Trace.WriteLine("titleRequest :");
            //Trace.WriteLine(titleRequest.zToJson());
            //Trace.WriteLine("splitedTitle :");
            //Trace.WriteLine(splitedTitle.zToJson());

            //string concatenatedTitle = splitedTitle.titlePart1;
            //if (!string.IsNullOrEmpty(splitedTitle.realTitlePart2))
            //    concatenatedTitle += " - " + splitedTitle.realTitlePart2;
            int i = title.IndexOf("$$");

            if (i != -1)
            {
                titleRequest.Title = title.Substring(0, i).Trim(__trimChars);
                title = title.Substring(i);
            }
            else
            {
                titleRequest.Title = title;
                title = null;
            }

            titleRequest.TitleStructure = title;
            titleRequest.FormatedTitle  = GetFormatedText(titleRequest.Title);
            titleRequest.Name           = GetName(titleRequest.FormatedTitle);
            if (title != null)
            {
                titleRequest.RemainText = __rgTitleStructureName.Replace(title, "").Trim(__trimChars);
            }

            //titleRequest.File = GetFile(titleRequest);

            PrintTitleInfo titleInfo = new PrintTitleInfo
            {
                OriginalTitle = titleRequest.OriginalTitle,
                Title         = titleRequest.Title,
                FormatedTitle = titleRequest.FormatedTitle,
                Name          = titleRequest.Name,
                Special       = titleRequest.Special,
                //SpecialMatch = titleRequest.SpecialMatch,
                SpecialText = titleRequest.SpecialText,
                Number      = titleRequest.Number,
                NumberMatch = titleRequest.NumberMatch,
                Date        = titleRequest.Date,
                DateType    = titleRequest.DateType,
                DateMatch   = titleRequest.DateMatch,
                //DateOtherMatchList = titleRequest.DateOtherMatchList,
                TitleStructure = titleRequest.TitleStructure,
                RemainText     = titleRequest.RemainText,
                //File = titleRequest.File
            };

            return(titleInfo);
        }
예제 #13
0
        private IEnumerable <Response> _Read()
        {
            _filename          = zPath.GetFileName(_file);
            _lineNumber        = 0;
            _years             = new List <ResponseYear>();
            _responseQuestions = new List <ResponseQuestion>();
            bool questionBlock  = false;
            int  emptyLineCount = 0;

            Trace.WriteLine($"read response file \"{_filename}\"");
            foreach (string line in zFile.ReadLines(_file))
            {
                _lineNumber++;
                //string line2 = line.Trim();
                if (line == "")
                {
                    //if (++emptyLineCount == _maxEmptyLine)
                    if (++emptyLineCount == _maxEmptyLine && _years.Count > 0)
                    {
                        break;
                    }
                    //int _maxEmptyLine
                    //if (_responseQuestions.Count > 0)
                    //    throw new PBException($"missing response for {GetQuestionWithoutResponse().zToStringValues(", ")}, line {_lineNumber}");
                    continue;
                }

                emptyLineCount = 0;
                bool        verifyRemainText = true;
                FindText_v2 findText         = _regexList.Find(line, contiguous: true);
                if (findText.Success)
                {
                    //MatchValues matchValues = findText.matchValues;
                    //while (matchValues.Match.Success)
                    ResponseQuestion responseQuestion = null;
                    while (findText.Success)
                    {
                        //ResponseQuestion responseQuestion = null;
                        //foreach (KeyValuePair<string, ZValue> namedValue in findText.GetValues())
                        foreach (KeyValuePair <string, RegexValue <ZValue> > namedValue in findText.GetRegexValues())
                        {
                            switch (namedValue.Key.ToLower())
                            {
                            case "category":
                                if (!_manageCategory)
                                {
                                    throw new PBException($"manage category is not activated");
                                }
                                if (_trace)
                                {
                                    Trace.WriteLine($"new category \"{namedValue.Value.Value}\"");
                                }
                                _category     = (string)namedValue.Value.Value;
                                _years        = new List <ResponseYear>();
                                questionBlock = false;
                                break;

                            case "year":
                                //if (_responseQuestions.Count != 0)
                                if (questionBlock)
                                {
                                    throw new PBException($"wrong year position, line {_lineNumber} column {findText.MatchIndex + 1} file \"{_filename}\"");
                                }
                                //AddYear(namedValue.Value, findText.Match.Index, findText.Match.Length);
                                AddYear(namedValue.Value.Value, namedValue.Value.Index, namedValue.Value.Length);
                                //_years.Add(new ResponseYear(int.Parse((string)namedValue.Value), matchValues.Match.Index, matchValues.Match.Length));
                                break;

                            case "questionnumber":
                                //if (responseQuestion != null)
                                //    //_responseQuestions.Add(responseQuestion);
                                //    SaveQuestion(responseQuestion);
                                //responseQuestion = new ResponseQuestion(int.Parse((string)namedValue.Value), matchValues.Match.Index, matchValues.Match.Length);
                                //responseQuestion.Year = GetYear(responseQuestion.Position);
                                //responseQuestion = NewQuestion(namedValue.Value, findText.Match.Index, findText.Match.Length, responseQuestion);
                                responseQuestion = NewQuestion(namedValue.Value.Value, namedValue.Value.Index, namedValue.Value.Length, responseQuestion);
                                questionBlock    = true;
                                break;

                            case "characterresponsecodes":
                                //if (responseQuestion == null)
                                //    throw new PBException($"unknow question, line {_lineNumber} column {matchValues.Match.Index + 1}");
                                //if (namedValue.Value != null)
                                //{
                                //if (responseQuestion == null)
                                //    responseQuestion = GetResponseQuestion(GetMiddlePosition(matchValues.Match.Index, matchValues.Match.Length));
                                ////GetYear(GetMiddlePosition(matchValues.Match.Index, matchValues.Match.Length))
                                ////Responses = ((string)namedValue.Value).ToCharArray()
                                //yield return new Response { Year = responseQuestion.Year, QuestionNumber = responseQuestion.QuestionNumber, Responses = (string)namedValue.Value };
                                //responseQuestion.FoundResponse = true;
                                //yield return SetResponse(namedValue.Value, findText.Match.Index, findText.Match.Length, responseQuestion);
                                yield return(SetResponse(namedValue.Value.Value, namedValue.Value.Index, namedValue.Value.Length, responseQuestion));

                                responseQuestion = null;
                                //}
                                break;

                            case "numericresponsecodes":
                                yield return(SetResponse(ConvertNumericResponseCodes(namedValue.Value.Value), namedValue.Value.Index, namedValue.Value.Length, responseQuestion));

                                responseQuestion = null;
                                break;
                            }
                        }
                        //if (responseQuestion != null)
                        //    //_responseQuestions.Add(responseQuestion);
                        //    SaveQuestion(responseQuestion);
                        //matchValues = matchValues.Next();
                        //findText.Next();
                        findText.FindNext(contiguous: true);
                    }

                    // control text not found
                    //if (findText.MatchIndex + findText.MatchLength < line.Length)
                    //{
                    //    string textNotFound = line.Substring(findText.MatchIndex + findText.MatchLength).Trim();
                    //    if (textNotFound.Length > 0)
                    //        Trace.WriteLine($"warning remain text \"{textNotFound}\" line {_lineNumber} column {findText.MatchIndex + findText .MatchLength + 1}");
                    //}

                    if (responseQuestion != null)
                    {
                        //_responseQuestions.Add(responseQuestion);
                        SaveQuestion(responseQuestion);
                    }


                    bool questionWithoutResponse = false;
                    foreach (ResponseQuestion responseQuestion2 in _responseQuestions)
                    {
                        if (!responseQuestion2.FoundResponse)
                        {
                            questionWithoutResponse = true;
                            break;
                        }
                    }
                    if (!questionWithoutResponse)
                    {
                        _responseQuestions = new List <ResponseQuestion>();
                    }
                }
                else if (_acceptUnknowText)
                {
                    Trace.WriteLine($"  unknow text \"{line}\" line {_lineNumber} file \"{_filename}\"");
                    verifyRemainText = false;
                }

                // control text not found
                if (verifyRemainText && findText.MatchIndex + findText.MatchLength < line.Length)
                {
                    string textNotFound = line.Substring(findText.MatchIndex + findText.MatchLength).Trim();
                    if (textNotFound.Length > 0)
                    {
                        //Trace.WriteLine($"unknow text \"{textNotFound}\" line {_lineNumber} column {findText.MatchIndex + findText.MatchLength + 1} file \"{_filename}\"");
                        throw new PBException($"  unknow text \"{textNotFound}\" line {_lineNumber} column {findText.MatchIndex + findText.MatchLength + 1} file \"{_filename}\"");
                    }
                }
            }
            foreach (ResponseQuestion responseQuestion2 in _responseQuestions)
            {
                if (!responseQuestion2.FoundResponse)
                {
                    Trace.WriteLine($"no response for {responseQuestion2.Year} - question {responseQuestion2.QuestionNumber}");
                }
            }
        }
예제 #14
0
파일: test_f.cs 프로젝트: labeuze/source
 public static void Test_RegexValues(IEnumerable<XElement> elements, string input)
 {
     Trace.WriteLine("\"{0}\" : ", input);
     RegexValuesList rvs = new RegexValuesList(elements);
     //FindText_old findText = rvs.Find_old(input);
     FindText findText = rvs.Find(input);
     if (findText.Found)
     {
         //NamedValues<ZValue> values = findText.regexValues.GetValues_old();
         NamedValues<ZValue> values = findText.matchValues.GetValues();
         //Trace.WriteLine("  found \"{0}\" {1} values", findText.regexValues.Name, values.Count);
         Trace.WriteLine("  found \"{0}\" {1} values", findText.matchValues.Name, values.Count);
         foreach (KeyValuePair<string, ZValue> value in values)
         {
             if (value.Value is ZStringArray)
                 Trace.WriteLine("  value {0} = [{1}] {2}", value.Key, ((string[])value.Value).Length, ((string[])value.Value).zToStringValues(s => "\"" + s.zToStringOrNull() + "\""));
             else
                 Trace.WriteLine("  value {0} = \"{1}\"", value.Key, value.Value.zToStringOrNull());
         }
     }
     else
         Trace.WriteLine("  not found");
     Trace.WriteLine();
 }