如何用可变数量的前导零填充字符串?
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 来处理这个问题。
声明一个字符串变量来存储输入(例如命名为 InputVar
)。您将需要继续使用此处的 concat()
表达式和输入值以添加每个项目所需的最大可能零(例如 BoxNo 为 4,[=42= 为 5 ]物品ID).
这显然效率低下,但据我所知,没有更好的方法在 Flow 中插入动态数量的字符。
声明第二个整数变量以确定长度(例如命名为InputVarLength
),使用以下自定义表达式作为值:
length(variables('InputVar'))
最后,声明第三个变量,它将计算子字符串结果(例如命名为 InputVarResult
)。使用此自定义子字符串表达式作为值:
substring(variables('InputVar'),sub(variables('InputVarLength'),5),5)
对于 ItemID 或其他结果,您需要将子字符串表达式中的 5
替换为适当的 startIndex
和 length
到 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')
我们的 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 来处理这个问题。
声明一个字符串变量来存储输入(例如命名为
InputVar
)。您将需要继续使用此处的concat()
表达式和输入值以添加每个项目所需的最大可能零(例如 BoxNo 为 4,[=42= 为 5 ]物品ID).这显然效率低下,但据我所知,没有更好的方法在 Flow 中插入动态数量的字符。
声明第二个整数变量以确定长度(例如命名为
InputVarLength
),使用以下自定义表达式作为值:length(variables('InputVar'))
最后,声明第三个变量,它将计算子字符串结果(例如命名为
InputVarResult
)。使用此自定义子字符串表达式作为值:substring(variables('InputVar'),sub(variables('InputVarLength'),5),5)
对于 ItemID 或其他结果,您需要将子字符串表达式中的 5
替换为适当的 startIndex
和 length
到 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')