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