首页 > 区块链 > Power Query 提取第一个汉字之前的数字编码
中心科技  

Power Query 提取第一个汉字之前的数字编码

摘要:to_number()函数问题:提取第一个汉字前面的编码因为编码与描述混合在一起,中间还有数量与规格的数字,所以直接用Text.Select是不行的,用数字到非数字的分列也不行,因为编码中还有非数字字符“-”。我们需要自定义一个函数来确定第一个汉字的位置,那么我们就需要了解一个关于字符编码的常识:汉
Power Query 提取第一个汉字之前的数字编码

问题:提取第一个汉字前面的编码

因为编码与描述混合在一起,中间还有数量与规格的数字,所以直接用Text.Select是不行的,用数字到非数字的分列也不行,因为编码中还有非数字字符“-”。

我们需要自定义一个函数来确定第一个汉字的位置,那么我们就需要了解一个关于字符编码的常识:

Power Query 提取第一个汉字之前的数字编码

汉字的Unicode编码范围是4E00-9FA5,也就是说只要字符的编码大于或等于4E00就可以认为是汉字,我们就根据这个来判断第一个汉字的位置。

自定义函数法Power Query 提取第一个汉字之前的数字编码

我们模拟一个字符串,提取第一个汉字的位置

= List.Min(List.Transform(Text.ToList("123456产品12"),each if Character.ToNumber(_)>=0x4e00 then Text.PositionOf("123456产品12",_) else 999))

然后用这个创建函数:

= (t) => List.Min(List.Transform(Text.ToList(t),each if Character.ToNumber(_)>=0x4e00 then Text.PositionOf(t,_) else 999))

就是把字符串用参数t替换。

解释一下,上面这一句的意思,就是把字符串转换成单个字符的列表,然后用Character.ToNumber函数把每个字符转成数值编码,与0x4E00进行比较,如果符合条件就得出这个字符在整个字符串中的位置,如果不符合条件就给出一个很大的值,因为我们最后要取得汉字的最小位置。

有了这个函数,我们就可以很方便地得出每个字符串第一个汉字的位置,然后根据这个位子使用函数Text.Range来拆分字符串:

Power Query 提取第一个汉字之前的数字编码

Text.Range([线上商家编码],0,fx([线上商家编码]))

从位置0开始,截取长度为第一个汉字的位置,这样就能得到我们想要的第一个汉字之前的编码了。

文本拆分法

再来一种方法,使用Text.SplitAny函数,同样的我们要知道汉字的范围,4e00对应的是”一“

Power Query 提取第一个汉字之前的数字编码

基本汉字的最后一个9fa5对应的是”龥“

Power Query 提取第一个汉字之前的数字编码

这就是我们常常看到的有些公式中出现的:

{"一".."龥"}

这就是基本汉字的范围。

我们把所有的汉字合并起来作为分隔符

Text.Combine({"一".."龥"})

我们使用Text.SplitAny函数拆分之后,是一个列表,我们需要的是第一个值就用{0}来提取列表的第一个值:

Power Query 提取第一个汉字之前的数字编码

应用到我们的数据中就是这样的:

Power Query 提取第一个汉字之前的数字编码

CTRL+E法

在Excel中还有个简单的方法CTRL+E智能填充:

Power Query 提取第一个汉字之前的数字编码

当然第一次不能成功,还要修改一下示例数据,加上4-4的那一行,然后再继续CTRL+E

Power Query中的两种方法,都需要了解汉字的Unicode编码,如果经常处理这种混合字符串,就需要记住汉字的范围

{"一".."龥"}

或者数值范围十六进制:4E00-9FA5

免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。