解析zxw doc文檔最終版本

var allTixingArr = [
'默寫',
'作文',
'其他',
'短文',
'句子',
'單句',
'填空題',
'簡答題',
'解答題',
'判斷題', //判斷
'雙選題',
'計算題',
'作圖題',
'綜合題',
'推斷題',
'實驗題',
'探究題',
'選擇題', //多選
'辨析題',
'論述題',
'簡析題',
'多選題', //多選
'單選題', //單選
'連線題',
'詩歌鑑賞',
'語言表達',
'名著導讀',
'完形填空',
'單詞辯音',
'單詞釋義',
'閱讀理解',
'閱讀表達',
'語法填空',
'短文改錯',
'閱讀填空',
'單句改錯',
'完成句子',
'句型轉換',
'句子翻譯',
'書面表達',
'非選擇題',
'現代文閱讀',
'文言文閱讀',
'閱讀七選五',
'任務型閱讀',
'任務型讀寫',
'識圖作答題',
'材料解析題',
'分析評價題',
'技術應用題',
'作圖讀圖題',
'不定項選擇題', //多選
'單句語法填空',
'實驗題探究題',
'首字母短文填空'];

//文檔全解析
var xiaotiMiaoshu = []; //小題描述
var daanhejiexi = ""; //答案和解析
var allCount = 0; //總的題目數量
var plainTxt = "";
function startFenxi(){
    if($.trim(ue.getPlainTxt()) == ""){
        layer.open({
            title:"抱歉",
            content:"沒有檢測到內容"
        });
        return false;
    }
    plainTxt = ue.getPlainTxt().substring(0, ue.getPlainTxt().indexOf("答案和解析"));
    daanhejiexi = ue.getPlainTxt().substring(ue.getPlainTxt().indexOf("答案和解析"));
    //去掉所有回車和換行
    plainTxt = plainTxt.replace(/\n/g, "");
    daanhejiexi = daanhejiexi.replace(/\n/g, "");
    //判斷是否匹配類型,如果是則可以取試卷標題
    if(daanhejiexi.length > 0){
        $("#paper-name").val((plainTxt.substring(0, plainTxt.indexOf("副標題"))));
    }
    var tixingStrArr = []; //存儲當前得到的題型
    var tixingCount = 0;
    for(var i=0; i<allTixingArr.length; i++){
        if(plainTxt.indexOf("、"+allTixingArr[i]+"(") != -1){
            tixingCount ++;
            tixingStrArr.push(allTixingArr[i]);
        }
    }

    //大題的序號需要找出然後刪除

    var indexArr = []; //將得到的題型進行排序
    for(var i=0; i<tixingStrArr.length; i++){
        //獲取對應的大題序號
        var xuhaoStr = plainTxt.substring(plainTxt.indexOf("、" + tixingStrArr[i] + "(") -1, plainTxt.indexOf("、" + tixingStrArr[i] + "("));
        if(tixingStrArr.length <= 9){
            tixingStrArr[i] = xuhaoStr + "、" + tixingStrArr[i] + "(";
        }else if(tixingStrArr.length <= 20){
            var firstStr = plainTxt.substring(plainTxt.indexOf("、" + tixingStrArr[i] + "(") -2, plainTxt.indexOf("、" + tixingStrArr[i] + "(") - 1);
            if(firstStr === "十" || firstStr === "二"){
                xuhaoStr = firstStr + xuhaoStr;
            }
        }
        indexArr.push(plainTxt.indexOf(tixingStrArr[i]));
    }
    //對得到的題型進行排序
    for(var i=0;i<indexArr.length-1;i++){//外層循環控制排序趟數
        for(var j=0;j<indexArr.length-1-i;j++){//內層循環控制每一趟排序多少次
            if(indexArr[j]>indexArr[j+1]){
                //序號排序
                var temp=indexArr[j];
                indexArr[j]=indexArr[j+1];
                indexArr[j+1]=temp;
                //排序題型以適配文檔題目類型順序
                var temp2=tixingStrArr[j];
                tixingStrArr[j]=tixingStrArr[j+1];
                tixingStrArr[j+1]=temp2;
            }
        }
    }
    //此時tixingArr是已經排列好順序的
    var datiStrArr = []; //存儲每一道大題的題文
    for(var i=0; i<tixingStrArr.length; i++){
        if(i == tixingStrArr.length -1 ){ //最後一種
            datiStrArr.push(plainTxt.substring(plainTxt.indexOf(tixingStrArr[i])));
        }else{
            datiStrArr.push(plainTxt.substring(plainTxt.indexOf(tixingStrArr[i]), plainTxt.indexOf(tixingStrArr[(i+1)])));
        }
    }
    //得到了每道大題的題文內容後進行解析判斷這道題總共有多少道小題,這樣可以循環
    var xiaotiCountArr = []; //每道大題的小題個數
    var stat = 0; //序號
    var startIndex = 1;
    for(var i=0; i<datiStrArr.length; i++){
        var xiaotiCount = datiStrArr[i].substring(datiStrArr[i].indexOf("本大題共")+4, datiStrArr[i].indexOf("小題,"));
        var xiaotiScore = datiStrArr[i].substring(datiStrArr[i].indexOf("小題,共")+4, datiStrArr[i].indexOf(".0分)"));
        xiaotiCountArr.push(parseInt(xiaotiCount));
        //保存題的描述,包括題型,小題數量,小題分數
        var tixing = tixingStrArr[i];
        var tiCount = xiaotiCount;
        allCount += parseInt(xiaotiCount);
        var tiScore = xiaotiScore;
        if(i === 0){
            startIndex = 1;
        }else{
            startIndex += parseInt(xiaotiCountArr[(i-1)]); //開始序號爲上一題的開始+上一題的題數
        }
        xiaotiMiaoshu.push(tixing+"&*" + tiCount + "&*" + tiScore + "&*" + startIndex);
    }
    //得到題文描述後開始進行分析每道大題中的所有小題並取出來
    for(var i=0; i<xiaotiMiaoshu.length; i++){
        var split = xiaotiMiaoshu[i].split("&*");
        var tiCount = split[1];
        var tiScore = split[2];
        var tiStartIndex = split[3];
        var tiEndIndex = parseInt(tiStartIndex) + parseInt(tiCount) -1;
        //獲取每一道小題內容
        for(var j=tiStartIndex; j<=tiEndIndex; j++){
            var title = datiStrArr[i].substring(datiStrArr[i].indexOf(j+". "));
            var singleQuestionStr = "";
            var singleAnswerStr = "";
            if(j === tiEndIndex){
                singleQuestionStr = title.substring(title.indexOf(j+". ")+(j+". ").length);
                singleAnswerStr = daanhejiexi.substring(daanhejiexi.indexOf(j+". ")+(j+". ").length);
            }else{
                singleQuestionStr = title.substring(title.indexOf(j+". ")+(j+". ").length, title.indexOf((parseInt(j)+1)+". "));
                singleAnswerStr = daanhejiexi.substring(title.indexOf(j+". ")+(j+". ").length, daanhejiexi.indexOf((parseInt(j)+1)+". "));
            }
            let answer = "A"; //默認選項
            let childrenArr = [];
            let isFirst = false;
            let isLast = false;
            if(j == 1){
                isFirst = true;
            }
            if(j == allCount){
                isLast = true;
            }
            let qid = parseInt(j);
            let score = parseInt(tiScore / tiCount);
            let selectArr = ["<button>A</button>", "<button>B</button>", "<button>C</button>", "<button>D</button>"];
            questions.push({
                answer:answer,
                childrenArr:childrenArr,
                qid:qid,
                score:score,
                selectArr:selectArr,
                title:singleQuestionStr
            });
        }
    }
    //設置答案
    setAnswer(xiaotiMiaoshu);
    uiFlushCardList();
    uiFlushQuestionList();
}
//解析答案並設置到題目中
var allAnswerStrArr = [];
function setAnswer(xiaotiMiaoshu){
    var nowCount = 0;
    for(var i=1; i<=allCount; i++){
        nowCount++;
        if(i == allCount){
            allAnswerStrArr.push(daanhejiexi.substring(daanhejiexi.indexOf(i+".【")));
        }else{
            let ind = daanhejiexi.indexOf((i+1)+".【");
            let endStr = daanhejiexi.substring(ind-1, ind);
            let flag = true; //是否是正確的序號捕獲
            if(endStr == "1" || endStr == "2" || endStr == "3" || endStr == "4" || endStr == "5" || endStr == "6" || endStr == "7" || endStr == "8" || endStr == "9"){
                if(((i+1)+""+endStr).length > 2){ //序號長度如果大於3位數則是正確的
                    flag = true;
                }else{
                    flag = false;
                    console.info("錯誤的序號:" + (i+1));
                }
            }
            if(daanhejiexi.indexOf((i+1)+".【") == -1 || flag == false){
                let tmp = daanhejiexi.substring(daanhejiexi.indexOf(i+".【答案】"));
                let jiexiTmp = tmp.substring(tmp.indexOf("【答案】"), tmp.indexOf("【解析】"));
                let xiaotiCount = 0; //小題答案個數
                for(var j=1; j<=5; j++){
                    if(jiexiTmp.indexOf(j+"】") != -1){
                        i++;
                        xiaotiCount ++;
                    }else{
                        break;
                    }
                }
                var resultJiexi = tmp.substring(0, tmp.indexOf(i+".【答案】"));
                resultJiexi = resultJiexi.substring(resultJiexi.indexOf("【解析】") + 4);
                var answerMoreStr1 = "";
                for(var j=1; j<=xiaotiCount; j++){
                    if(j == xiaotiCount){
                        let answer = jiexiTmp.substring(jiexiTmp.indexOf(j+"】")+2, jiexiTmp.indexOf(j+"】") + 3);
                        answerMoreStr1 = nowCount+".【答案】" + answer + "【解析】" + resultJiexi;
                        nowCount++;
                    }else{
                        let answer = jiexiTmp.substring(jiexiTmp.indexOf(j+"】")+2, jiexiTmp.indexOf(j+"】") + 3);
                        answerMoreStr1 = nowCount+".【答案】" + answer + "【解析】" + resultJiexi;
                        nowCount++;
                    }
                    allAnswerStrArr.push(answerMoreStr1);
                }
                i--;
                nowCount --;
            }else{
                allAnswerStrArr.push(daanhejiexi.substring(daanhejiexi.indexOf(i+".【"), daanhejiexi.indexOf((i+1)+".【")));
            }
        }
    }
    for(var i=0; i<xiaotiMiaoshu.length; i++){
        var split = xiaotiMiaoshu[i].split("&*");
        var tixing = split[0];
        var tiCount = split[1];
        var tiStartIndex = split[3];
        var tiEndIndex = parseInt(tiStartIndex) + parseInt(tiCount) -1;
        tiStartIndex = parseInt(tiStartIndex);
        tiEndIndex = parseInt(tiEndIndex);
        //["一、單選題("] --> ["單選題"]
        tixing = tixing.substring(tixing.indexOf("、")+1, tixing.indexOf("("));
        for(var j=tiStartIndex; j<=tiEndIndex; j++){
            if(tixing == "選擇題" || tixing == "單選題"){
                questions[j-1].type = 1;
                questions[j-1].answer = allAnswerStrArr[j-1].substring(allAnswerStrArr[j-1].indexOf("【答案】") + 4, allAnswerStrArr[j-1].indexOf("【答案】") + 5);
            }else if(tixing == "多選題" || tixing == "雙選題" || tixing == "不定項選擇題"){
                questions[j-1].type = 2;
                questions[j-1].answer = [];
                var tmp = allAnswerStrArr[j-1].substring(allAnswerStrArr[j-1].indexOf("【答案】")+4, allAnswerStrArr[j-1].indexOf("【解析】"));
                if(tmp.indexOf("A") !== -1){
                    questions[j-1].answer.push("A");
                }
                if(tmp.indexOf("B") !== -1){
                    questions[j-1].answer.push("B");
                }
                if(tmp.indexOf("C") !== -1){
                    questions[j-1].answer.push("C");
                }
                if(tmp.indexOf("D") !== -1){
                    questions[j-1].answer.push("D");
                }
            }else if(tixing == "判斷題"){
                questions[j-1].type = 3;
                if((allAnswerStrArr[j-1].substring(allAnswerStrArr[j-1].indexOf("【答案】") + 4, allAnswerStrArr[j-1].indexOf("【答案】") + 5)) == "T" || (allAnswerStrArr[j-1].substring(allAnswerStrArr[j-1].indexOf("【答案】") + 4, allAnswerStrArr[j-1].indexOf("【答案】") + 5)) == "A"){
                    questions[j-1].answer = "對";
                }else if((allAnswerStrArr[j-1].substring(allAnswerStrArr[j-1].indexOf("【答案】") + 4, allAnswerStrArr[j-1].indexOf("【答案】") + 5)) == "F" || (allAnswerStrArr[j-1].substring(allAnswerStrArr[j-1].indexOf("【答案】") + 4, allAnswerStrArr[j-1].indexOf("【答案】") + 5)) == "B"){
                    questions[j-1].answer = "錯";
                }else{
                    questions[j-1].answer = "對";
                }
            }else{
                questions[j-1].type = 5;
                questions[j-1].answer = allAnswerStrArr[j-1].substring(allAnswerStrArr[j-1].indexOf("【答案】") + 4, allAnswerStrArr[j-1].indexOf("【解析】"));
            }
            questions[j-1].answerMore = allAnswerStrArr[j-1].substring(allAnswerStrArr[j-1].indexOf("【解析】") + 4);
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章