如何用M代码编写提取字符串数字并补前导零的自定义函数
问题解决
错误原因
- 你调用
Text.Select提取数字后直接用as number强转为数字类型,但后续使用的Text.Start、Text.Middle都是仅支持文本类型输入的文本处理函数,输入数字参数就会触发类型转换报错。 - 原有补零逻辑只适配了固定两位数字的场景,若提取到的数字为1位时也会出现逻辑错误。
修正后代码
let if_order = (if_name as text) => let // 提取输入字符串中的所有数字字符,保留文本类型 ExtractDigits = Text.Select(if_name, {"0".."9"}), // 转换为数值用于判断大小 DigitValue = Number.From(ExtractDigits), // 根据数值大小执行对应逻辑 ProcessResult = if DigitValue < 100 then // 遍历每一位数字,统一补前导零到2位后拼接 Text.Combine( List.Transform( Text.ToList(ExtractDigits), each Text.PadStart(_, 2, "0") ) ) else ExtractDigits in ProcessResult in if_order
效果验证
- 调用
if_order("gi-1/1")返回0101,符合预期 - 调用
if_order("gi-1/3")返回0103,符合预期
如果需要返回整数类型,只需要在最终结果外层套一层Number.From()即可。
内容的提问来源于stack exchange,提问作者Danail Petrov
相关产品推荐
相关产品推荐

