自定义函数 - 对于字符串中的每个字符

Custom function - for each character within a string

你好,

我正在尝试将自定义公式放在一起,它的逻辑非常简单。基本上,对于我传递给它的每个字符串,我希望它删除所有非数字字符并对找到的每个数字应用前导零(如果数字 < 10)

例如:

function('gi-1/1') 应该 return 0101(或者只是 101 作为整数)。分别 'gi-1/3' 将 return 0103(或 103)。

我正在努力用 mcode 实现这一点,我希望你能帮助我。这是我到目前为止设法放在一起的东西(另外,我只想在数字小于 100 时这样做)

let if_order = (if_name) => 
    let
        Result_1 = Text.Select(if_name, {"0".."9"}) as number,
        Result_2 = if Result_1 < 100 then Text.Combine({Text.Start(Result_1, 1), "0", Text.Middle(Result_1,1)}) else Result_1
    in
        Result_2
in
    if_order

我收到的错误非常令人困惑。基本上是这样说的:

“我们无法将值“11”转换为数字类型”

希望这是有道理的。

问题是 Text.Select return 的文本,但您要求它是一个数字。您需要更明确地进行转换。

试试这个修改(将结果输出为文本):

let if_order = (if_name) => 
    let
        Result_1 = Text.Select(if_name, {"0".."9"}),
        Result_2 = if Number.FromText(Result_1) < 100
                   then Text.Combine({Text.Start(Result_1, 1), "0", Text.Middle(Result_1,1)})
                   else Result_1
    in
        Result_2
in
    if_order

如果你想 return 一个整数,你可以使用数学而不是字符串操作:

let if_order = (if_name) => 
    let
        Result_1 = Number.FromText(Text.Select(if_name, {"0".."9"})),
        Result_2 = if Result_1 < 100
                   then 100 * Number.IntegerDivide(Result_1, 10)
                            + Number.Mod(Result_1, 10)
                   else Result_1
    in
        Result_2
in
    if_order

试试这个

删除所有非数字 拆分成一个列表,附加一个零,重新组合

(TheText as text) =>
let Source = Text.Remove(TheText, { Character.FromNumber(32)..Character.FromNumber(47), Character.FromNumber(58)..Character.FromNumber(255) } ),
done = Text.Combine(List.Transform(Text.ToList(Source ), each "0"&_))
in done