用 Excel 处理数据时,有时需要对字符串进行拆分。对于比较简单的拆分,使用 Excel 函数可以顺利完成,但碰到一些特殊需求,或者拆分的规则比较复杂时,则很难用 Excel 实现了。这里列出一些拆分需求示例,分析拆分难点,并提供 SPL 解决代码。SPL 是专业计算引擎 esProc 使用的语言,用于处理结构化数据运算非常方便,对于字符串拆分的运算也很简单。

一、规则单词拆分

这里有一份车间采购产品清单,清单的每一项包含了需要采购的品牌以及产品型号。现在想要把每一项的品牌以及型号拆分后单独列到后面。

文件 productlist.xlsx 中数据如下:

期望结果:

使用 Excel 来处理这类拆分时,可以使用数据的分列,但是分列有个缺点,其实也算不上缺点,只是针对这个只想拆出品牌的需求来说单词被过渡拆分了。比如后面的型号,也会被拆分到多个列,又需要重新合并,过程有点得不偿失。不过 Excel 还有一个快速填充,可以根据给定的参考值,比如第一行给定 PANASONIC,便可使用类似规则快速填充后面行的拆分,然后再用 Mid 函数间接算出型号的字符串部分,过程依然繁琐。

使用 SPL 可以直接读取 Excel 文件,对于实时分析操作,也可以将 Excel 中的数据复制到剪贴板,然后在 SPL 里面使用 clipboard 函数直接从剪贴板获取数据,数据整理完后,再将结果放入剪贴板,然后在 Excel 中粘贴结果,这样便可将 Excel 的分析操作跟 SPL 的计算无缝对接起来,方便而又高效。

SPL 拆分代码:

  A B
1 =clipboard().import@i() /从剪贴板导入产品清单
2 =A1.(~.split@1(" ")) /从第一个空格处将产品清单分离为两部分,产生一个序列的序列
3 =A2.concat@n("\t") /拼接为子序列的成员用 Tab 分隔,序列的成员之间用回车分隔的二维表串
4 =clipboard(A3) /将串值放置到剪贴板

代码执行完成后,只需在B1 格粘贴便可得到期望结果。

二、数字分离

如下为一些数字跟字符混合在一起的数据,现在需要将数字和字符分离开。

文件 numbers.xlsx 中数据如下:

期望结果:

如果是光分离数字出来,仍然可以使用给定首行参考值,然后采用快速填充,便可以将所有数字分离出来。但是要将剩余的字符再分离出来,Excel 没有合适的办法,因为有些数字是跟字符交叉混合在一起,没法用 Mid 等函数拆分。只能采用 VBA 写代码逐字循环,判断字符类型,挨个分离,过程依然麻烦。

SPL 可以直接将串分离成单字符,并根据类型划分:

  A B
1 =clipboard().split@n() /将剪贴板数据按回车拆分为成员,然后将成员再逐字拆分
2 =A1.(~.align@a([true,false],isdigit(~)).(~.concat())) /每一项字符序列用是否为数字分成两组,继而再拼成串,从而分离出数字和字符
3 =A2.concat@n("\t") /将两层序列分别用 Tab 和回车拼为二维表式的大串
4 =clipboard(A3) /将大串放置到剪贴板

三、日期分离

下面为一些包含日期的句子或段落,现在想要把句子里面所有的日期分离出来,一行中包含多个日期时,用分号分开。

文件 multidates.xlsx 中数据如下:

期望结果:

要将句子里面的日期分离出来,Excel 没有相应的办法,尤其像这种一个句子里面有不定个数的日期。如果是固定位置或长度的日期格式,才可能用截取固定长度,或者使用快速填充能够办到。对于上述多个日期的分离,只能写 VBA 代码,再用正则表达式去匹配解析,完成这种需求对人员要求较高,且实现过程繁琐。

SPL 直接用空格分割串为单词序列,然后按格式转换日期类型的数据:

  A B
1 =clipboard().split@n(“ “) /将剪贴板数据按回车拆分成员,然后用空格将每一成员拆分为单词序列
2 =A1.(~. (date(~,"dd.MM.yy"))) /将单词序列的成员按照指定格式转换为日期类型的数据
3 =A2.(~.select(ifdate(~))) /选出序列中的日期类型的值
4 =clipboard(A3.concat@n(“;”)) /将日期串序列结果拼接为二维表串并放置到剪贴板

执行完上述代码后,直接在源表中的B1 格执行粘贴,即可得到期望结果。

四、按字符拆分

如下表为一列长度不等的数字,现在需要将数字逐字拆分成为单独的列。

文件 number.xlsx 的数据:

期望结果:

使用 Excel 拆分上述数字时,首先想到的是使用分列,但是像这种逐字拆分,分列时只能一个一个指定分隔位,数字比较长时就要多次重复设置,操作多而麻烦。其次是使用函数,比如可以在 B1 写入 =MID($A1,COLUMN(A1),1),然后拖拽鼠标进行行填充以及列填充,但这种操作不好掌握最大列数,篇幅大时,操作也不方便。

SPL 可以直接按字符拆分:

  A B
1 =clipboard().split@n() /将剪贴板数据按回车拆分成员,然后每个成员再缺省拆分为单字符序列
2 =A1.concat@n("\t") /将拆分后的两层序列拼成串式二维表
3 =clipboard(A2) /将结果放置到剪贴板

上述代码执行完成后,同样在 B1 处粘贴拆分后的数据即可。

五、属性表和文件名拆分

如下数据为一段日志描述文件,结构相对复杂,其中包含类似于属性表的分节描述。现在想将属性描述中的 PublicKeyToken 以及文件名分离出来。

文件 log.xlsx 的数据:

期望结果:

这是一个综合串的分离,第一层为用逗号分隔的描述串,然后第二项类似于属性分节串的描述。所以使用 Excel 时,需要多次分列,以及多次快速填充,方可完成期望结果。同样是步骤多,且需要给定参考值来快速填充,过程繁琐。

SPL 提供了函数直接对属性串取值,以及对文件名的不同部分拆分:

  A B
1 =clipboard().split@nc() /将剪贴板数据用回车拆分成员,然后以逗号拆分子成员序列
2 =A1.([replace(~(2),"\"","").property("PublicKeyToken"),filename(replace(~(3),"\"",""))]) /去掉两端引号后,用属性 property 函数从第 2 项获取 PublicKeyToken 的值;再用 filename 函数拆分出第 3 项中的文件名;再将这两个值构成序列
3 =clipboard(A2.concat@n("\t")) /将结果拼为大串放置到剪贴板

《SPL Cookbook》中有更多相关计算示例。

Excel 字符串拆分相关推荐

  1. excel split函数_Excel 字符串拆分

    用 Excel 处理数据时,有时需要对字符串进行拆分.对于比较简单的拆分,使用 Excel 函数可以顺利完成,但碰到一些特殊需求,或者拆分的规则比较复杂时,则很难用 Excel 实现了.这里列出一些拆 ...

  2. excel两个字符串相减_Excel技巧—超实用的字符串拆分小技巧

    原标题:Excel技巧-超实用的字符串拆分小技巧 点赞再看,养成习惯: 当断不断,反受其乱. 我们每天都在Excel中各种操作,本质上来说就是对各种数据进行操作,而这些数据专业点来说就是字符串.因此熟 ...

  3. java根据逗号拆分_Excel技巧—超实用的字符串拆分小技巧

    点赞再看,养成习惯:当断不断,反受其乱. 微信搜索[亦心Excel]关注这个不一样的自媒体人. 本文GitHub https://github.com/hugogoos/Excel已收录,包含Exce ...

  4. 每日一题(字符串拆分)

    前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...

  5. 在Bash中将字符串拆分为数组

    本文翻译自:Split string into an array in Bash In a Bash script I would like to split a line into pieces a ...

  6. c将字符串拆分,并存入结构体

    c将字符串拆分,并存入结构体 函数功能 代码实现 结果显示 函数功能 字符串格式:type=0&u=user1&p=pass1 结构体格式: typedef struct{unsign ...

  7. python 1 2 3怎么拼接所有可能的数_6000字长文,带你用Python完成 “Excel合并(拆分)” 的各种操作!...

    原标题:6000字长文,带你用Python完成 "Excel合并(拆分)" 的各种操作! 一.概述 其实Excel合并这个需求,应该是一个极为普遍的需求了.今天我们就利用Pytho ...

  8. UTF-8编码的字符串拆分成单字、获取UTF-8字符串的字符个数的代码及原理(c++实现)...

    一.字符编码简单介绍 1. ASCII码 在计算机内部,全部的信息终于都表示为一个二进制的字符串.每个二进制位(bit)有0和1两种状态,因此八个二进制位就能够组合出256种状态,这被称为一个字节(b ...

  9. boost::regex模块将字符串拆分为标记的测试程序

    boost::regex模块将字符串拆分为标记的测试程序 实现功能 C++实现代码 实现功能 boost::regex模块将字符串拆分为标记的测试程序 C++实现代码 #include <boo ...

  10. 在Python中将字符串拆分为字符数组

    Given a string and we have to split into array of characters in Python. 给定一个字符串,我们必须在Python中拆分为字符数组. ...

最新文章

  1. 建筑物占据的网格数目的确定(三)
  2. 是什么让 Spring5 放弃了使用 Guava Cache?
  3. 零基础入门学习Python(28)文件系统
  4. MySQL的用户和权限介绍
  5. StringBuilder的原理
  6. java 写一个计算器_java编写一个计算器类
  7. 一个简单的主机管理模拟程序
  8. 7-37 抓老鼠啊~亏了还是赚了? (20 分)
  9. leetcode -- Search Insert Position
  10. 网络请求 get 请求时, 如果参数中的字符带有+号
  11. WPS如何对文档加密,忘记密码又如何解密?
  12. 【系统】VMware虚拟机安装黑苹果系统macOS 12.5详细步骤
  13. CSDN 赚积分C币方法
  14. PROFINET转CAN网关监测CAN设备在线设置文档
  15. SAM简单介绍(百度翻译)
  16. android 代码保护 高级混淆
  17. docker容器运行不退出的方法
  18. 小米Mix2s刷机教程
  19. Python数据结构栈,后进先出
  20. activiti工作流,审批系统轻松落地,请假审批demo从流程绘制到审批结束实例

热门文章

  1. php商城项目开发视频_ThinkPHP开发大型商城项目实战视频_ThinkPHP商城开发案例
  2. 进销存excel_Excel教程:简易进销存!厉害了,SUMIFS!
  3. viper4android hifi,体验HiFi级音质 蝰蛇音效进阶使用教程
  4. Xshell 7官网免费版下载与安装(详细教程)
  5. js 原生 导出 excel
  6. 怎么修改PDF文件内容
  7. 用戶故事 vs 用例
  8. Qt moc文件缺少“stdafx.h”异常
  9. 【小白向教程】从零开始为你的手机安装Win11系统
  10. Mac实用软件及功能总结