偶遇问题
在文本数据处理时,采用Excel分列处理是惯用方法。最近,谭编对某宝网关于代写论文网店及产品交易记录进行研究,统计“代写”交易记录大数据,旨在研究学术不端乱象。其中抓取了4478个产品交易记录,在对抓取的文本数据进行处理时,需要产品标题、店铺名、省、市这4个字段,遇到Excel分列的混乱问题,如图1所示。
图1 Excel分列混乱问题
分析文本数据的特征:每行数据分布的表列数目不确定;每行右边3列均为店名、省、市。如果只有少数几行数据,在Excel中采用手动调整对齐表列、合并店名标题等操作,工作量不算什么,也没必要大动干戈编程处理。但是这里需要处理4478行数据,因此需要采用简单的编程来实现对Excel表格数据中不确定列数的数据翻转。
这里需要将右边3列(店名、省、市)对称翻转到行首(市、省、店名),然后将剩余的表列数据合并为“产品标题”字段。操作的示意图如图2所示。
图2不确定列数的Excel表列对称翻转示意图
编程环境
采用Asp专业调试工具.exe搭建本地电脑运行Asp网页的运行环境。当然在Excel中编写VBA宏程序,也可以实现,这里采用笔者熟悉的Asp编程。
编程算法
(1)将交易记录信息表中的产品标题列的所有数据(4478行)复制到taobao.txt中。
(2)逐行读取taobao.txt文件中的每一行数据,赋值到line变量中,采用split(line,”|”)分割每一行数据,并保存到arr数组变量。
(3)利用for循环,从数组变量的最后一个元素(下标变量为ubound(arr))到第一个,倒序遍历arr数组读取每个元素的值(字符串)。例如,某一行数据有a0,a1,a2,a3,a4等元素,从i=4到0读取,即读取顺序为a4,a3,a2,a1,a0。
(4)在for遍历之前,设置一个计数器m=0,在for循环体内,每读取一次数组元素,计数器m加1。判断读取第4个元素前,将读取的元素值用“|”拼接字符串,在读取第4个以后的元素值,采用直接拼接(合并单元格)。将拼接的字符串赋值给newline变量。
(5)每处理一行数据后,将新字符串newline逐行写入taobao2.txt目标文件中。
(6)从第(2)到第(5)步,设置while循环。循环条件是没有达到文本末尾:
Do while not f1.atEndofStream
……
Loop
(7)关闭文件的读写。
编程代码
完整代码如下,左右滑动代码可显示全部。
1set fs=server.createobject("scripting.filesystemobject")
2file=server.mappath("taobao.txt") '读取的文件名
3set f1=fs.opentextfile(file,1,true) '读取方式
4filename=Server.MapPath("taobao2.txt") '写入的文件名
5Set f2=fs.OpenTextFile(filename,8,true,0) '写入方式
6Do while not f1.atendofstream
7 line=f1.readline
8 arr=Split(line,"|")
9 newline=""
10 m=0
11 For i=ubound(arr) To 0 Step -1
12 m=m+1
13 If m<5 then
14 newline=newline+"|"+arr(i)
15 Else
16 newline=newline+arr(i)
17 End if
18 Next
19 f2.writeline(newline)
20Loop
21Response.write"Ok"
22f1.close()
23Set f1=Nothing
24f2.close
25Set f2=nothing
26Set fs=nothing
将Asp程序保存在index.asp文件中,与Asp专业调试工具.exe文件在同一个文件夹下。双击运行“Asp专业调试工具.exe”,即可打开浏览器自动执行index.asp程序,程序执行非常快,几乎无察觉,在同一文件夹下,即可看见新生成了目标文件taobao2.txt,其内容如图3B所示,可以看出,经过25行简单的asp代码,实现了对4478行文本数据的快速翻转。
(A)处理前 (B)处理后
图3 处理前后的文本数据(点击图片可放大)
Excel分列处理
全选复制taobao2.txt的文本内容,在Excel中粘贴,然后采用“|”分列,即可得到如图4所示的结果。
图4 最终的Excel数据
后记
本文举例处理“代写”交易记录大数据,旨在研究学术不端乱象,希望大家不会被图中的代写产品信息吸引,谭编不希望本文成为误导大家“不端”的诱因。如果您是“编辑之谈”和“编辑之谭”的忠实粉丝,作为期刊编辑,谭编愿意给您的写作和投稿提供建议。
谭编采用简单的26行程序代码,实现了对Excel表中不确定列数的4478行表格数据的快速翻转。您可能也会遇到类似的Excel表格问题,这篇文章可以提供思路。
感谢您关注“编辑之谈”公众号、点击右下方的【好看】、转发朋友圈、收藏本文。如果您需要本文的asp调试工具和本文的程序文件,欢迎您留言。
倔强的笔枪
【好看】就点这里