将组内元素的顺序进行翻转_Excel中不确定列数的数据列快速翻转

7592dd357d0cabf1076f0e3ca33b6621.gif 

偶遇问题

在文本数据处理时,采用Excel分列处理是惯用方法。最近,谭编对某宝网关于代写论文网店及产品交易记录进行研究,统计“代写”交易记录大数据,旨在研究学术不端乱象。其中抓取了4478个产品交易记录,在对抓取的文本数据进行处理时,需要产品标题、店铺名、省、市这4个字段,遇到Excel分列的混乱问题,如图1所示。

75a40d663fc7fdc1cd7b2689e6f1b73f.png

图1 Excel分列混乱问题

分析文本数据的特征:每行数据分布的表列数目不确定;每行右边3列均为店名、省、市。如果只有少数几行数据,在Excel中采用手动调整对齐表列、合并店名标题等操作,工作量不算什么,也没必要大动干戈编程处理。但是这里需要处理4478行数据,因此需要采用简单的编程来实现对Excel表格数据中不确定列数的数据翻转。

这里需要将右边3列(店名、省、市)对称翻转到行首(市、省、店名),然后将剩余的表列数据合并为“产品标题”字段。操作的示意图如图2所示。

ca8f18d4fa437c7ce97e74d30220b022.png

图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行文本数据的快速翻转。

594439222ae21d191e6e72277baff69a.png 0cf5e92e16b5fe951bc72c255e1895e1.png

(A)处理前       (B)处理后

图3  处理前后的文本数据(点击图片可放大)

 

Excel分列处理

全选复制taobao2.txt的文本内容,在Excel中粘贴,然后采用“|”分列,即可得到如图4所示的结果。

ad7d2ca5eed4c8b264d70085b1edb534.png

图4 最终的Excel数据

 

后记

本文举例处理“代写”交易记录大数据,旨在研究学术不端乱象,希望大家不会被图中的代写产品信息吸引,谭编不希望本文成为误导大家“不端”的诱因。如果您是“编辑之谈”和“编辑之谭”的忠实粉丝,作为期刊编辑,谭编愿意给您的写作和投稿提供建议。

谭编采用简单的26行程序代码,实现了对Excel表中不确定列数的4478行表格数据的快速翻转。您可能也会遇到类似的Excel表格问题,这篇文章可以提供思路。

感谢您关注“编辑之谈”公众号、点击右下方的【好看】、转发朋友圈、收藏本文。如果您需要本文的asp调试工具和本文的程序文件,欢迎您留言。

a3d0c79524b52bf18bb17d5f45445b4b.png

倔强的笔枪

a6b3b670320a10591950a125e9be377b.png 1b3eeadd1b3e4ebc99a0706bce534165.png【好看】就点这里 37558f63b56fd2373059f01113807930.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值