院校投档单中专业志愿数据差异的处理策略

2022-09-26 04:18扬州大学王勇
数字技术与应用 2022年9期
关键词:投档字符串单元格

扬州大学 王勇

院校子系统导出的投档单是高校获得的第一手新生信息,但不同省份使用的版本导出投档单中专业志愿数据存在差异。本文通过分析导出院校投档单中专业志愿数据的差异,分别提出了借助VFP程序和Excel函数来解决数据差异的处理策略。通过实践证明,运用此策略可以巧妙解决问题,便于形成统一规范的基础录取数据库。

从2001年普通高校招生全面实施网上录取以来,由教育部组织的全国普通高校招生网上录取课题组开发研制的网上录取系统功能强大,界面友好,高效可靠,同时从其院校子系统导出的投档单(可分别为dBaseⅣ文件(.dbf)或excel文件(*.xls)两种类型)也为各录取高校个性化的后续工作提供了基础电子数据。自2017年高考改革开始后,改革省份和未改革省份需要使用不同版本的网上录取系统实施网上录取,各版本院校子系统导出的投档单文件也略有差异。以2021年普通高校招生网上录取为例,分别使用了2012SP3版和2020R2版院校子系统,2012SP3版院校子系统导出的投档单有24张表(信息库6张、代码库18张)[1],2020R2版院校子系统导出的投档单有43张表(信息库9张、代码库34张)[2],dBaseⅣ文件(.dbf)为24个或43个单独文件,excel文件(*.xls)为一个工作簿(内含24或43张表)。两种版本投档单中有些表虽然表名一样,但其中的字段和结构却有所差异。为整合各省录取数据形成院校基础录取数据库带来困难。为便于高校内各职能部门在后续工作中的使用,就需对网上录取院校子系统导出的投档单进行统一规范的数据处理,其中考生的专业志愿数据是专业评估、计划编制的重要依据。本文就2020R2版和2012SP3版院校子系统导出投档单考生专业志愿的数据差异进行统一处理提供了解决策略,同时对于其他具有相似类型信息差异的数据统一处理也有借鉴作用。

1 导出院校投档单中专业志愿数据的差异

2012SP3版院校子系统导出的投档单中考生的专业志愿数据项在T_TDD表里,含多项字段数据,本文仅取与专业志愿有关字段进行说明。每位考生一行数据,KSH(考生号)唯一,考生专业志愿从字段ZYDH1(专业代号1)到字段ZYDH6(专业代号6)横向排列,各省ZYDH按省份不同有两位字符或三位字符之分。如图1所示。

图1 2012SP3专业志愿数据项(字段)Fig.1 2012SP3 professional volunteer data items (fields)

2020R2版院校子系统导出的投档单中考生的专业志愿数据项在T_zykmx表里,如图2所示。

图2 2020R2版专业志愿数据项(字段)Fig.2 2020R2 version of professional volunteer data items (fields)

KSH(考生号)行数不定,考生有几个专业志愿就有几行数据,最多为6。考生专业志愿按序号纵向排列,即同一KSH(考生号)下ZYXH(专业序号)为1的ZYDH(专业代号)是专业志愿1,依次类推,直到ZYXH(专业序号)为6的ZYDH(专业代号)是专业志愿6。

两种版本院校子系统导出的投档单从专业志愿数据看,显然无法进行直接合并,只有经过数据规范处理后,使2020R2版和2012SP3版投档单字段结构形式统一,才能对dBaseⅣ文件(.dbf)使用数据追加命令进行合并,对excel文件(*.xls)使用复制-粘贴的方法形成合并总库。

2 解决院校投档单中专业志愿数据差异的策略

2.1 借助VFP程序

解决思路是首先通过VFP修改表结构命令ALTER TABLE在T_TDD文件(.dbf)中增加相关字段,包含ZYDH1(专业代号1)到ZYDH6(专业代号6),然后选择打开T_TDD和T_zykmx两文件,利用指针循环语句SCAN…ENDSCAN将T_zykmx文 件 中 的zydh从第一条记录开始,直到最后一条记录分别按KSH(考生号)及ZYXH(志愿序号)替换到T_TDD文件中的相对应KSH的ZYDH1到ZYDH6中后结束。

专业志愿替换的VFP程序代码如下(假设导出投档单文件在D盘daochu文件夹)[3];

set default to D:daochu

2020R2版导出的T_TDD文件在运行此VFP程序后,专业志愿的数据结构就和2012SP3导出的TDD文件专业志愿的数据结构一致,每位考生一行数据,考生专业志愿从字段ZYDH1(专业代号1)到字段ZYDH6(专业代号6)横向排列。处理后的各省份各批次数据就可以直接利用数据追加命令(APPEND FROM……)即可形成合并总库。

2.2 借助Excel函数

解决思路是先将TDD工作薄中的t_zykmx表中竖向排列的各考生志愿专业代号,利用Excel函数公式按KSH(考生号)将考生的所有ZYXH(志愿序号)下的ZYDH(专业代号)合并为一个字符串,这样每个KSH就只对应一个专业代号合并字符串,解决了表中KSH数据行数不定问题,再在T_TDD表中利用Excel函数公式按KSH将t_zykmx表中合并后的字符串中的不同位数的字符跨表填入T_TDD表相应专业代号(zydh1-zydh6)中。

具体解决方案如下:假设该省导出投档单含23位考生信息,ZYDH(专业代号)为3位字符。

首先在T_TDD表中增加相关字段列,包含ZYDH1到ZYDH6,然后在t_zykmx表中增加相关字段列,I列(KSH1(考生号1)),J列(ZYDHHB(专业代号合并))。将A列数据选择后“复制-选择性粘贴-值”粘贴到I列中。选择I列数据,然后点击“数据-删除重复项”,注意要勾选“以当前选定区域排序”,再点击删除重复项按钮,就可以在I列中保留KSH的唯一值并按KSH排序。在J2单元格输入“=PHONETIC(OFFSET(A$1,MATCH(I2,A:A,0)-1,6,COUNTIF(A:A,I2),1))”后 回车,然后拖动J2单元格右下角填充柄下拉填充到KSH1列数据末行,复制J列数据选择性粘贴为值,就可以按KSH得到每位考生的志愿专业代号相连的字符串。

在这里用到了连接文本函数PHONETIC,引用函数OFFSET,查找函数MATCH,条件计数函数COUNTIF[4]。以J2单元格为例,“COUNTIF(A:A,I2)”计算出考生号是I2单元格的值(21*********031)在A列出现的行数,同样也是这个考生号专业序号的最大数,是2,说明这个考生有zydh1-zydh2,zydh3-zydh6为 空。“MATCH(I2,A:A,0)”计算出考生号是I2值的KSH的在A列出现的最小行,是第2行。“OFFSET(A$1,MATCH(I2,A:A,0)-1,6,COUNTIF(A:A,I2),1)”得出以A$1单元格为参照系,向下移动1行向右移动6列得到的2行1列单元格区域(G2:G3),即考生号为I2单元格值的考生的两个专业代号“002”、“001”所在区域。“PHONETIC(OFFSET (A$1,MATCH(I2,A:A,0)-1,6,COUNTIF(A:A,I2),1))”将所得区域(G2:G3)各单元格的文本合并,得到合并字符串“002001”。J列其他各个单元格通过合并相应的不同单元格区域得到和KSH对应的合并字符串,如图3所示。

图3 获得考生专业志愿代号合并字符串Fig.3 Obtaining the combined string of the candidate's professional volunteer code

在ZYDHHB字段列每个考生按KSH(考生号)得到的一串字符,对应专业代号是两个字符,则字符串的1-2位是专业志愿1、字符串的3-4位是专业志愿2、……字符串的11-12位是专业志愿6,对应专业代号是三个字符,则字符串1-3位是专业志愿1、字符串的4-6位是专业志愿2、……字符串的16-18位是专业志愿6。

在T_TDD表的B2单元格输入“=LEFT(VLOOKUP(T_TDD! A2,t_zykmx!$I$1:$J$24,2,0),3)”,得到在查找区域t_zykmx表$I$1:$J$24区域中查找值是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个专业志愿代号(zydh1~zydh6)后,选择B2到G2,拖动填充柄下拉完成自动填充,得到每个考生号的相应专业志愿代号(zydh1~zydh6)。

使用VLOOKUP函数要注意查找区域引用方式和查找方式是精确匹配还是大致匹配,否则容易出现错误[5]。因为此例查找区域已排序,所以使用了大致匹配。如图4所示。

图4 获得考生各个专业志愿代号(横向排列)Fig.4 Obtaining the volunteer code of each major of the candidates (horizontal arrangement)

再选择ZYDH1到ZYDH6区域,在本区域“复制-选择性粘贴-值”,完成专业志愿数据结构形式和2012SP3版一致的转换,以后就可直接使用复制-粘贴方法形成合并总库。

如果各个省份各个批次导出投档单考生人数不同,ZYDH(专业代号)字符数不同,在Excel函数公式里修改相应参数后就可以完成专业志愿数据结构形式的处理。

3 结语

虽然使用VFP程序以及Excel函数都可以解决专业志愿数据差异的处理问题,但是从使用VFP程序以及Excel函数的处理过程来看,将dBaseⅣ文件(.dbf)利用VFP程序进行数据处理,人为操作少,更为方便快捷,明显可以提高工作效率,但是对于部分对于VFP程序不熟悉,习惯于使用Excel的用户来说,利用Excel函数的强大功能也能够解决工作中的实际问题。

引用

[1] 清华大学计算机系.全国普通高校招生网上录取系统使用手册(院校端系统)[Z].教育部高校学生司,2008.

[2] 清华大学计算机系.全国普通高校招生网上录取系统院校系统(2020版)使用手册[Z].教育部高校学生司,2021.

[3] 孙淑霞,李思明,刘焕军,等,编著.Visual FoxPro 6.0 程序设计教程(第4版)[M].北京:电子工业出版社,2013.

[4] 黄照鹤.Excel函数速查手册[M].北京:化学工业出版社, 2011.

[5] 宋翔编.Excel公式与函数大辞典[M].北京:人民邮电出版社, 2010.

猜你喜欢
投档字符串单元格
山西省近两年普通高校专升本录取普通批院校投档最低分
2020-2021年在晋招生第二批本科C类部分院校录取统计表
2020-2021年在晋招生第二批本科C类部分院校录取统计表
流水账分类统计巧实现
玩转方格
玩转方格
浅谈Excel中常见统计个数函数的用法
一种新的基于对称性的字符串相似性处理算法
依据字符串匹配的中文分词模型研究
一种针对Java中字符串的内存管理方案