//private ResponseReader.ResponseQuestion GetResponseQuestion(int position) private ResponseReader.ResponseQuestion GetResponseQuestion(QuestionDataResponse value) { int position = GetMiddlePosition(value.ColumnIndex, value.Length); foreach (ResponseReader.ResponseQuestion responseQuestion in _responseQuestions) { if (!responseQuestion.FoundResponse && Math.Abs(position - responseQuestion.Position) <= 2) { return(responseQuestion); } } Trace.WriteLine($"search question at position {position + 1}, line {value.LineNumber}"); Trace.WriteLine($" question count {_responseQuestions.Count}"); foreach (ResponseReader.ResponseQuestion responseQuestion in _responseQuestions) { Trace.WriteLine($" question no {responseQuestion.QuestionNumber} at position {responseQuestion.Position + 1} distance {Math.Abs(position - responseQuestion.Position)}"); } throw new PBFileException($"question not found, line {value.LineNumber} column {value.ColumnIndex + 1} file \"{value.Filename}\"", value.File, value.LineNumber); }
//private Response SetResponse(ZValue value, int index, int length, ResponseQuestion responseQuestion) private Response_v2 SetResponse(QuestionDataResponse value, ResponseReader.ResponseQuestion responseQuestion) { //ResponseReader.ResponseQuestion responseQuestion; //if (_responseQuestion != null) // responseQuestion = _responseQuestion; //else if (responseQuestion == null) { //responseQuestion = GetResponseQuestion(GetMiddlePosition(value.ColumnIndex, value.Length)); responseQuestion = GetResponseQuestion(value); } //if (_trace) // Trace.WriteLine($"set response \"{value}\" question {responseQuestion.QuestionNumber} index {index} length {length}"); responseQuestion.FoundResponse = true; // $$pb remove responseQuestion from list return(new Response_v2 { Category = _responseCategory, Year = responseQuestion.Year, QuestionNumber = responseQuestion.QuestionNumber, Responses = value.Responses, SourceFile = responseQuestion.SourceFile, SourceLine = responseQuestion.SourceLineNumber }); }
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); }