private void QuestionAddChoiceLine(QuestionData value) { QuestionReader.QuestionBaseTmp question; if (_associationQuestion != null) { if (_associationQuestion.Complete) { throw new PBFileException($"unknow response, association question is complete, line {value.LineNumber} file \"{value.Filename}\"", value.File, value.LineNumber); } question = _associationQuestion; } else if (_question != null) { question = _question; } else { throw new PBFileException($"unknow question, line {value.LineNumber} file \"{value.Filename}\"", value.File, value.LineNumber); } if (question.ChoiceLineCount > _maxLinesPerChoice - 1) { throw new PBFileException($"to many lines ({question.ChoiceLineCount}) for response \"{value.TrimedLine}\" line {value.LineNumber} file \"{value.Filename}\"", value.File, value.LineNumber); } question.Choices[question.Choices.Count - 1] += " " + value.TrimedLine; question.ChoiceLineCount++; }
private void _TraceUnknowValue(QuestionData value) { string label = null; if (_questionYear == null) { //Trace.WriteLine($" unknow header value \"{line}\" line {_lineNumber} file \"{_filename}\""); if (_traceUnknowHeaderValue) { label = "unknow header"; } } else if (_traceUnknowValue) { label = "unknow"; } if (label != null) { Trace.WriteLine($" {label} value \"{value.TrimedLine}\" line {value.LineNumber} file \"{value.Filename}\""); } }
public IEnumerable <QuestionResponse_v2> Read(IEnumerable <string> files, string baseDirectory = null) { _lastValueType = null; _dontSetLastValueType = false; _emptyLineCount = 0; _questionYear = null; _questionType = QuestionType.None; _question = null; _questionTmp = null; _associationQuestion = null; _sendCurrentQuestion = false; _responseYears = null; _responseQuestions = null; _responseCategory = null; _responseQuestionBlock = false; _responseQuestion = null; _responseEnd = false; _baseDirectory = baseDirectory; TextDataReader textDataReader = new TextDataReader(); textDataReader.SetRegexList(_questionRegexValuesList); bool readResponse = false; //int emptyLineCount = 0; int pageNumber = 1; foreach (QuestionData value in textDataReader.Read(files).Select(textData => QuestionData.CreateQuestionData(textData))) { if (value.Type != QuestionDataType.EmptyLine) { _emptyLineCount = 0; } else { _emptyLineCount++; } _sendCurrentQuestion = false; _dontSetLastValueType = false; switch (value.Type) { case QuestionDataType.Responses: if (pageNumber >= _minPageForResponses) { if (_trace) { Trace.WriteLine($"start read response (line {value.LineNumber} \"{value.Filename}\")"); } textDataReader.SetRegexList(_responseRegexValuesList); textDataReader.ContiguousSearch = true; _sendCurrentQuestion = true; readResponse = true; _responseYears = new List <ResponseReader.ResponseYear>(); _responseQuestions = new List <ResponseReader.ResponseQuestion>(); _responseQuestionBlock = false; } break; case QuestionDataType.PageNumber: pageNumber++; _sendCurrentQuestion = true; break; default: //throw new PBFileException($"unknow value type {value.Type} line {value.LineNumber} file \"{value.Filename}\"", value.File, value.LineNumber); if (!readResponse) { ReadQuestion(value); } else { QuestionResponse_v2 response = ReadResponse(value); if (response != null) { yield return(response); } } break; } if (_sendCurrentQuestion) { if (_question != null) { yield return(GetQuestion()); } _question = _questionTmp; _questionTmp = null; } //if (readResponse) // break; if (!_dontSetLastValueType) { _lastValueType = value.Type; } if (_responseEnd) { break; } } if (_question != null) { yield return(GetQuestion()); } ControlRemindResponseQuestions(); }
private QuestionResponse_v2 ReadResponse(QuestionData value) { Response_v2 response = null; if (_responseQuestion != null && value.Type != QuestionDataType.Response) { if (_trace) { //Trace.WriteLine($"save response question (line {value.LineNumber} \"{value.Filename}\")"); Trace.WriteLine($"save response question : {_responseQuestion.Year} - {_responseQuestion.QuestionNumber}"); } SaveResponseQuestion(_responseQuestion); _responseQuestion = null; } switch (value.Type) { case QuestionDataType.EmptyLine: if (_emptyLineCount == _responseMaxEmptyLine && _responseYears.Count > 0) { _responseEnd = true; } break; case QuestionDataType.ResponseCategory: _responseCategory = ((QuestionDataResponseCategory)value).Category; if (_trace) { Trace.WriteLine($"response category : {_responseCategory} (line {value.LineNumber} \"{value.Filename}\")"); } ControlRemindResponseQuestions(); _responseYears = new List <ResponseReader.ResponseYear>(); _responseQuestionBlock = false; break; case QuestionDataType.ResponseYear: QuestionDataResponseYear responseYear = (QuestionDataResponseYear)value; if (_responseQuestionBlock) { throw new PBException($"wrong response year position, line {responseYear.LineNumber} column {responseYear.ColumnIndex + 1} file \"{responseYear.Filename}\""); } if (_trace) { Trace.WriteLine($"response year : {responseYear.Year} (line {value.LineNumber} \"{value.Filename}\")"); } ResponseAddYear(responseYear); break; case QuestionDataType.QuestionNumber: //responseQuestion = NewQuestion(namedValue.Value.Value, namedValue.Value.Index, namedValue.Value.Length, responseQuestion); QuestionDataQuestionNumber questionNumber = (QuestionDataQuestionNumber)value; if (_trace) { Trace.WriteLine($"response question : {questionNumber.QuestionNumber} (line {value.LineNumber} \"{value.Filename}\")"); } _responseQuestion = ResponseCreateResponseQuestion(questionNumber); _responseQuestionBlock = true; break; case QuestionDataType.Response: QuestionDataResponse responseValue = (QuestionDataResponse)value; if (_responseQuestion != null && _responseQuestion.SourceLineNumber != responseValue.LineNumber) { SaveResponseQuestion(_responseQuestion); _responseQuestion = null; } response = SetResponse(responseValue, _responseQuestion); if (_trace) { Trace.WriteLine($"response : {response.Responses} question {response.Year} - {response.QuestionNumber} (line {value.LineNumber} \"{value.Filename}\")"); } _responseQuestion = null; break; } ControlResponseQuestions(); return(response); }
private void ReadQuestion(QuestionData value) { //bool lastValueType = false; //bool sendCurrentQuestion = false; //QuestionReader.QuestionTmp question = null; switch (value.Type) { case QuestionDataType.EmptyLine: if (_lastValueType == QuestionDataType.QuestionChoice || (_associationQuestion != null && _associationQuestion.Complete && _lastValueType == QuestionDataType.QuestionText)) { if (_question != null) { _sendCurrentQuestion = true; } else if (_associationQuestion != null) { _associationQuestion.Complete = true; } } else { // dont change _lastValueType _dontSetLastValueType = true; } break; case QuestionDataType.QuestionYear: _sendCurrentQuestion = true; _questionYear = ((QuestionDataQuestionYear)value).Year; _associationQuestion = null; break; case QuestionDataType.QuestionType: _sendCurrentQuestion = true; _questionType = ((QuestionDataQuestionType)value).QuestionType; _associationQuestion = null; break; case QuestionDataType.QuestionNumber: _sendCurrentQuestion = true; if (_questionYear == null) { throw new PBFileException($"unknow year, line {value.LineNumber} file \"{value.Filename}\"", value.File, value.LineNumber); } //string sourceFile = GetSubPath(value.File); _questionTmp = new QuestionReader.QuestionTmp { Year = (int)_questionYear, Type = _questionType, Number = ((QuestionDataQuestionNumber)value).QuestionNumber, QuestionLineCount = 0, SourceFile = GetSubPath(value.File), SourceLine = value.LineNumber }; if (_associationQuestion != null) { _associationQuestion.Complete = true; } break; case QuestionDataType.QuestionChoice: QuestionAddChoice((QuestionDataQuestionChoice)value); break; case QuestionDataType.Unknow: switch (_lastValueType) { case QuestionDataType.QuestionNumber: _question.QuestionText = value.TrimedLine; _question.QuestionLineCount++; _lastValueType = QuestionDataType.QuestionText; _dontSetLastValueType = true; break; case QuestionDataType.QuestionText: QuestionAddLine(value); // keep _lastValueType to QuestionDataType.QuestionText _dontSetLastValueType = true; break; case QuestionDataType.QuestionChoice: QuestionAddChoiceLine(value); // keep _lastValueType to QuestionDataType.QuestionChoice _dontSetLastValueType = true; break; default: // _manageAssociationQuestion if (_lastValueType == QuestionDataType.QuestionType && _questionType == QuestionType.Association) { _associationQuestion = new QuestionReader.QuestionAssociationTmp { Type = QuestionType.Association, QuestionText = value.TrimedLine, QuestionLineCount = 1, Complete = false }; _lastValueType = QuestionDataType.QuestionText; _dontSetLastValueType = true; } else { _TraceUnknowValue(value); } break; } break; } }