时间:2023-06-19|浏览:288
提取第一个汉字前面的编码。
由于编码与描述混合在一起,中间还有数量与规格的数字,所以直接用Text.Select是不行的。用数字到非数字的分列也不行,因为编码中还有非数字字符“-”。我们需要自定义一个函数来确定第一个汉字的位置。因此,我们需要了解一个关于字符编码的常识:汉字的Unicode编码范围是4E00-9FA5。也就是说,只要字符的编码大于或等于4E00就可以认为是汉字。我们就根据这个来判断第一个汉字的位置。
自定义函数法:
我们模拟一个字符串,提取第一个汉字的位置。
=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来拆分字符串。
Text.Range([线上商家编码], 0, fx([线上商家编码]))
从位置0开始,截取长度为第一个汉字的位置,这样就能得到我们想要的第一个汉字之前的编码了。
文本拆分法:
再来一种方法,使用Text.SplitAny函数。同样的我们要知道汉字的范围,4E00对应的是“一”,基本汉字的最后一个9FA5对应的是“龥”。这就是我们常常看到的有些公式中出现的:{"一".."龥"}。这就是基本汉字的范围。我们把所有的汉字合并起来得到的是一个列表。我们需要的是第一个值,所以用{0}来提取列表的第一个值。
应用到我们的数据中就是这样的。
CTRL+E法:
在Excel中还有个简单的方法CTRL+E智能填充。当然第一次不能成功,还要修改一下示例数据,加上4-4的那一行,然后再继续CTRL+E。
PowerQuery中的两种方法,都需要了解汉字的Unicode编码,如果经常处理这种混合字符串,就需要记住汉字的范围:{"一".."龥"},或者数值范围十六进制:4E00-9FA5。
用戶喜愛的交易所
已有账号登陆后会弹出下载