如何用可变数量的前导零填充字符串?

How can I pad a string with a variable number of leading zeros?

我们的 MS Flow - 更新项目任务中有这个公式...

concat(items('Apply_to_each')['T_x002d_Code']
,'-'
,items('Apply_to_each')['BoxNo']
,'-'
,
items('Apply_to_each')['ID'])

但是我们需要在 BoxNo 和 ID 中添加前导零,所以它最终是这样的:

A02-00001-000235

我们也尝试过:

substring(concat('000000', variables('ItemID'))
, sub(5, length(variables('BoxNo')))
, add(6, length(variables('ItemID'))))

但运气不好。

BoxNo 值可以从 1 到 99,999,因此我们需要最多填充 4 个前导零

ItemID 可以从 1 到 999,999,因此我们需要最多填充 5 个前导零

我们如何格式化这些字段?

您需要使用一对 Expressions 来处理这个问题。

  1. 声明一个字符串变量来存储输入(例如命名为 InputVar)。您将需要继续使用此处的 concat() 表达式和输入值以添加每个项目所需的最大可能零(例如 BoxNo 为 4,[=42= 为 5 ]物品ID).

    这显然效率低下,但据我所知,没有更好的方法在 Flow 中插入动态数量的字符。

  2. 声明第二个整数变量以确定长度(例如命名为InputVarLength),使用以下自定义表达式作为值:

     length(variables('InputVar'))
    
  3. 最后,声明第三个变量,它将计算子字符串结果(例如命名为 InputVarResult)。使用此自定义子字符串表达式作为值:

     substring(variables('InputVar'),sub(variables('InputVarLength'),5),5)
    

对于 ItemID 或其他结果,您需要将子字符串表达式中的 5 替换为适当的 startIndexlength 到 return 您想要的尺寸。作为参考,子字符串格式为:

substring(text, startIndex, length)

其中包括您要查找其子字符串的字符串值、您希望从该字符串中开始的位置,以及您希望在子字符串结果中包含从该起始位置开始的多少个字符。

嵌套减法格式为:

sub(minuend, subtrahend)

其中包括要减去的整数值(减数)和要减去的整数值(减数)。例如。 sub(10, 2) 将 return 为 8 的整数值。

我找到了另一种方法来做到这一点。有 formatNumber 函数。给定一个整数或小数,它将格式化您的数字。如果您使用“0”格式化程序,它将用零替换空格。

这是文档的 link:Format Number documentation

这里还有一个 link 自定义数字格式:custom-numeric-format-strings

因此,例如要用零填充,请使用:

formatNumber([your field],'0000000000')`

这是我的电力自动化流程中的一个示例:

formatNumber(items('Apply_to_each')?['AttorneyID'],'0000000000')