okx

PowerQuery提取数字编码前的汉字

时间:2023-06-19|浏览:214

问题:

提取第一个汉字前面的编码。

由于编码与描述混合在一起,中间还有数量与规格的数字,所以直接用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。

热点:汉字nft 汉字虚拟币 币圈pow nft编码 TRUE币

欧易

欧易(OKX)

用戶喜愛的交易所

币安

币安(Binance)

已有账号登陆后会弹出下载

« 上一条| 下一条 »
区块链交流群
数藏交流群

合作伙伴

非小号交易所排名-专业的交易行情资讯门户网站,提供区块链比特币行情查询、比特币价格、比特币钱包、比特币智能合约、比特币量化交易策略分析,狗狗币以太坊以太币玩客币雷达币波场环保币柚子币莱特币瑞波币公信宝等虚拟加密电子数字货币价格查询汇率换算,币看比特儿火币网币安网欧易虎符抹茶XMEX合约交易所APP,比特币挖矿金色财经巴比特范非小号资讯平台。
非小号行情 yonghaoka.cn 飞鸟用好卡 ©2020-2024版权所有 桂ICP备18005582号-1