揚州大學(xué) 王勇
院校子系統(tǒng)導(dǎo)出的投檔單是高校獲得的第一手新生信息,但不同省份使用的版本導(dǎo)出投檔單中專業(yè)志愿數(shù)據(jù)存在差異。本文通過分析導(dǎo)出院校投檔單中專業(yè)志愿數(shù)據(jù)的差異,分別提出了借助VFP程序和Excel函數(shù)來解決數(shù)據(jù)差異的處理策略。通過實踐證明,運用此策略可以巧妙解決問題,便于形成統(tǒng)一規(guī)范的基礎(chǔ)錄取數(shù)據(jù)庫。
從2001年普通高校招生全面實施網(wǎng)上錄取以來,由教育部組織的全國普通高校招生網(wǎng)上錄取課題組開發(fā)研制的網(wǎng)上錄取系統(tǒng)功能強大,界面友好,高效可靠,同時從其院校子系統(tǒng)導(dǎo)出的投檔單(可分別為dBaseⅣ文件(.dbf)或excel文件(*.xls)兩種類型)也為各錄取高校個性化的后續(xù)工作提供了基礎(chǔ)電子數(shù)據(jù)。自2017年高考改革開始后,改革省份和未改革省份需要使用不同版本的網(wǎng)上錄取系統(tǒng)實施網(wǎng)上錄取,各版本院校子系統(tǒng)導(dǎo)出的投檔單文件也略有差異。以2021年普通高校招生網(wǎng)上錄取為例,分別使用了2012SP3版和2020R2版院校子系統(tǒng),2012SP3版院校子系統(tǒng)導(dǎo)出的投檔單有24張表(信息庫6張、代碼庫18張)[1],2020R2版院校子系統(tǒng)導(dǎo)出的投檔單有43張表(信息庫9張、代碼庫34張)[2],dBaseⅣ文件(.dbf)為24個或43個單獨文件,excel文件(*.xls)為一個工作簿(內(nèi)含24或43張表)。兩種版本投檔單中有些表雖然表名一樣,但其中的字段和結(jié)構(gòu)卻有所差異。為整合各省錄取數(shù)據(jù)形成院?;A(chǔ)錄取數(shù)據(jù)庫帶來困難。為便于高校內(nèi)各職能部門在后續(xù)工作中的使用,就需對網(wǎng)上錄取院校子系統(tǒng)導(dǎo)出的投檔單進行統(tǒng)一規(guī)范的數(shù)據(jù)處理,其中考生的專業(yè)志愿數(shù)據(jù)是專業(yè)評估、計劃編制的重要依據(jù)。本文就2020R2版和2012SP3版院校子系統(tǒng)導(dǎo)出投檔單考生專業(yè)志愿的數(shù)據(jù)差異進行統(tǒng)一處理提供了解決策略,同時對于其他具有相似類型信息差異的數(shù)據(jù)統(tǒng)一處理也有借鑒作用。
2012SP3版院校子系統(tǒng)導(dǎo)出的投檔單中考生的專業(yè)志愿數(shù)據(jù)項在T_TDD表里,含多項字段數(shù)據(jù),本文僅取與專業(yè)志愿有關(guān)字段進行說明。每位考生一行數(shù)據(jù),KSH(考生號)唯一,考生專業(yè)志愿從字段ZYDH1(專業(yè)代號1)到字段ZYDH6(專業(yè)代號6)橫向排列,各省ZYDH按省份不同有兩位字符或三位字符之分。如圖1所示。
圖1 2012SP3專業(yè)志愿數(shù)據(jù)項(字段)Fig.1 2012SP3 professional volunteer data items (fields)
2020R2版院校子系統(tǒng)導(dǎo)出的投檔單中考生的專業(yè)志愿數(shù)據(jù)項在T_zykmx表里,如圖2所示。
圖2 2020R2版專業(yè)志愿數(shù)據(jù)項(字段)Fig.2 2020R2 version of professional volunteer data items (fields)
KSH(考生號)行數(shù)不定,考生有幾個專業(yè)志愿就有幾行數(shù)據(jù),最多為6??忌鷮I(yè)志愿按序號縱向排列,即同一KSH(考生號)下ZYXH(專業(yè)序號)為1的ZYDH(專業(yè)代號)是專業(yè)志愿1,依次類推,直到ZYXH(專業(yè)序號)為6的ZYDH(專業(yè)代號)是專業(yè)志愿6。
兩種版本院校子系統(tǒng)導(dǎo)出的投檔單從專業(yè)志愿數(shù)據(jù)看,顯然無法進行直接合并,只有經(jīng)過數(shù)據(jù)規(guī)范處理后,使2020R2版和2012SP3版投檔單字段結(jié)構(gòu)形式統(tǒng)一,才能對dBaseⅣ文件(.dbf)使用數(shù)據(jù)追加命令進行合并,對excel文件(*.xls)使用復(fù)制-粘貼的方法形成合并總庫。
解決思路是首先通過VFP修改表結(jié)構(gòu)命令A(yù)LTER TABLE在T_TDD文件(.dbf)中增加相關(guān)字段,包含ZYDH1(專業(yè)代號1)到ZYDH6(專業(yè)代號6),然后選擇打開T_TDD和T_zykmx兩文件,利用指針循環(huán)語句SCAN…ENDSCAN將T_zykmx文 件 中 的zydh從第一條記錄開始,直到最后一條記錄分別按KSH(考生號)及ZYXH(志愿序號)替換到T_TDD文件中的相對應(yīng)KSH的ZYDH1到ZYDH6中后結(jié)束。
專業(yè)志愿替換的VFP程序代碼如下(假設(shè)導(dǎo)出投檔單文件在D盤daochu文件夾)[3];
set default to D:daochu
2020R2版導(dǎo)出的T_TDD文件在運行此VFP程序后,專業(yè)志愿的數(shù)據(jù)結(jié)構(gòu)就和2012SP3導(dǎo)出的TDD文件專業(yè)志愿的數(shù)據(jù)結(jié)構(gòu)一致,每位考生一行數(shù)據(jù),考生專業(yè)志愿從字段ZYDH1(專業(yè)代號1)到字段ZYDH6(專業(yè)代號6)橫向排列。處理后的各省份各批次數(shù)據(jù)就可以直接利用數(shù)據(jù)追加命令(APPEND FROM……)即可形成合并總庫。
解決思路是先將TDD工作薄中的t_zykmx表中豎向排列的各考生志愿專業(yè)代號,利用Excel函數(shù)公式按KSH(考生號)將考生的所有ZYXH(志愿序號)下的ZYDH(專業(yè)代號)合并為一個字符串,這樣每個KSH就只對應(yīng)一個專業(yè)代號合并字符串,解決了表中KSH數(shù)據(jù)行數(shù)不定問題,再在T_TDD表中利用Excel函數(shù)公式按KSH將t_zykmx表中合并后的字符串中的不同位數(shù)的字符跨表填入T_TDD表相應(yīng)專業(yè)代號(zydh1-zydh6)中。
具體解決方案如下:假設(shè)該省導(dǎo)出投檔單含23位考生信息,ZYDH(專業(yè)代號)為3位字符。
首先在T_TDD表中增加相關(guān)字段列,包含ZYDH1到ZYDH6,然后在t_zykmx表中增加相關(guān)字段列,I列(KSH1(考生號1)),J列(ZYDHHB(專業(yè)代號合并))。將A列數(shù)據(jù)選擇后“復(fù)制-選擇性粘貼-值”粘貼到I列中。選擇I列數(shù)據(jù),然后點擊“數(shù)據(jù)-刪除重復(fù)項”,注意要勾選“以當前選定區(qū)域排序”,再點擊刪除重復(fù)項按鈕,就可以在I列中保留KSH的唯一值并按KSH排序。在J2單元格輸入“=PHONETIC(OFFSET(A$1,MATCH(I2,A:A,0)-1,6,COUNTIF(A:A,I2),1))”后 回車,然后拖動J2單元格右下角填充柄下拉填充到KSH1列數(shù)據(jù)末行,復(fù)制J列數(shù)據(jù)選擇性粘貼為值,就可以按KSH得到每位考生的志愿專業(yè)代號相連的字符串。
在這里用到了連接文本函數(shù)PHONETIC,引用函數(shù)OFFSET,查找函數(shù)MATCH,條件計數(shù)函數(shù)COUNTIF[4]。以J2單元格為例,“COUNTIF(A:A,I2)”計算出考生號是I2單元格的值(21*********031)在A列出現(xiàn)的行數(shù),同樣也是這個考生號專業(yè)序號的最大數(shù),是2,說明這個考生有zydh1-zydh2,zydh3-zydh6為 空。“MATCH(I2,A:A,0)”計算出考生號是I2值的KSH的在A列出現(xiàn)的最小行,是第2行。“OFFSET(A$1,MATCH(I2,A:A,0)-1,6,COUNTIF(A:A,I2),1)”得出以A$1單元格為參照系,向下移動1行向右移動6列得到的2行1列單元格區(qū)域(G2:G3),即考生號為I2單元格值的考生的兩個專業(yè)代號“002”、“001”所在區(qū)域?!癙HONETIC(OFFSET (A$1,MATCH(I2,A:A,0)-1,6,COUNTIF(A:A,I2),1))”將所得區(qū)域(G2:G3)各單元格的文本合并,得到合并字符串“002001”。J列其他各個單元格通過合并相應(yīng)的不同單元格區(qū)域得到和KSH對應(yīng)的合并字符串,如圖3所示。
圖3 獲得考生專業(yè)志愿代號合并字符串Fig.3 Obtaining the combined string of the candidate's professional volunteer code
在ZYDHHB字段列每個考生按KSH(考生號)得到的一串字符,對應(yīng)專業(yè)代號是兩個字符,則字符串的1-2位是專業(yè)志愿1、字符串的3-4位是專業(yè)志愿2、……字符串的11-12位是專業(yè)志愿6,對應(yīng)專業(yè)代號是三個字符,則字符串1-3位是專業(yè)志愿1、字符串的4-6位是專業(yè)志愿2、……字符串的16-18位是專業(yè)志愿6。
在T_TDD表的B2單元格輸入“=LEFT(VLOOKUP(T_TDD! A2,t_zykmx!$I$1:$J$24,2,0),3)”,得到在查找區(qū)域t_zykmx表$I$1:$J$24區(qū)域中查找值是T_TDD!A2的值一樣并返回第2列(J列)中單元格文本字符串從第1個到第3個字符,即zydh1的3個字符。
在C2單元格輸入“=MID(VLOOKUP(T_TDD!A2,t_zykmx!$I$1:$J$24,2,0),4,3)”,得到zydh2的3個字符。
在D2單元格輸入“=MID(VLOOKUP(T_TDD!A2,t_zykmx!$I$1:$J$24,2,0),7,3)”,得到zydh3的3個字符。
在E2單元格輸入“=MID(VLOOKUP(T_TDD!A2,t_zykmx!$I$1:$J$24,2,0),10,3)”,得到zydh4的3個字符。
在F2單元格輸入“=MID(VLOOKUP(T_TDD!A2,t_zykmx!$I$1:$J$24,2,0),13,3)”,得到zydh5的3個字符。
在G2單元格輸入“=MID(VLOOKUP(T_TDD!A2,t_zykmx!$I$1:$J$24,2,0),16,3)”,得到zydh6的3個字符。
在分別得到A2單元格考生號的6個專業(yè)志愿代號(zydh1~zydh6)后,選擇B2到G2,拖動填充柄下拉完成自動填充,得到每個考生號的相應(yīng)專業(yè)志愿代號(zydh1~zydh6)。
使用VLOOKUP函數(shù)要注意查找區(qū)域引用方式和查找方式是精確匹配還是大致匹配,否則容易出現(xiàn)錯誤[5]。因為此例查找區(qū)域已排序,所以使用了大致匹配。如圖4所示。
圖4 獲得考生各個專業(yè)志愿代號(橫向排列)Fig.4 Obtaining the volunteer code of each major of the candidates (horizontal arrangement)
再選擇ZYDH1到ZYDH6區(qū)域,在本區(qū)域“復(fù)制-選擇性粘貼-值”,完成專業(yè)志愿數(shù)據(jù)結(jié)構(gòu)形式和2012SP3版一致的轉(zhuǎn)換,以后就可直接使用復(fù)制-粘貼方法形成合并總庫。
如果各個省份各個批次導(dǎo)出投檔單考生人數(shù)不同,ZYDH(專業(yè)代號)字符數(shù)不同,在Excel函數(shù)公式里修改相應(yīng)參數(shù)后就可以完成專業(yè)志愿數(shù)據(jù)結(jié)構(gòu)形式的處理。
雖然使用VFP程序以及Excel函數(shù)都可以解決專業(yè)志愿數(shù)據(jù)差異的處理問題,但是從使用VFP程序以及Excel函數(shù)的處理過程來看,將dBaseⅣ文件(.dbf)利用VFP程序進行數(shù)據(jù)處理,人為操作少,更為方便快捷,明顯可以提高工作效率,但是對于部分對于VFP程序不熟悉,習(xí)慣于使用Excel的用戶來說,利用Excel函數(shù)的強大功能也能夠解決工作中的實際問題。
引用
[1] 清華大學(xué)計算機系.全國普通高校招生網(wǎng)上錄取系統(tǒng)使用手冊(院校端系統(tǒng))[Z].教育部高校學(xué)生司,2008.
[2] 清華大學(xué)計算機系.全國普通高校招生網(wǎng)上錄取系統(tǒng)院校系統(tǒng)(2020版)使用手冊[Z].教育部高校學(xué)生司,2021.
[3] 孫淑霞,李思明,劉煥軍,等,編著.Visual FoxPro 6.0 程序設(shè)計教程(第4版)[M].北京:電子工業(yè)出版社,2013.
[4] 黃照鶴.Excel函數(shù)速查手冊[M].北京:化學(xué)工業(yè)出版社, 2011.
[5] 宋翔編.Excel公式與函數(shù)大辭典[M].北京:人民郵電出版社, 2010.