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

时间:2019-02-01 10:50:41

标签: substring concatenation microsoft-flow

我们的MS Flow-Update Item任务中有此公式...

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个前导零

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

2 个答案:

答案 0 :(得分:2)

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

这是文档的链接:Format Number documentation

还有一个指向自定义数字格式的链接:custom-numeric-format-strings

例如用零填充:

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

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

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

答案 1 :(得分:1)

您将需要使用一对Expressions来解决这个问题。

  1. 声明一个String变量来存储输入(例如,名为baseObj obj = await collection.AsQueryable().Where(w=> w.ID == "id").firstAsync(); List<subObj> sObjList = obj.subObjList.Where(w => w.deleted == false).ToList(); )。您将需要在此处继续使用InputVar表达式和输入值来添加每个项目所需的最大可能零(例如, BoxNo 为4, ItemID 为5 >)。

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

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

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

    InputVarResult

对于 ItemID 或其他结果,您将用适当的substring(variables('InputVar'),sub(variables('InputVarLength'),5),5) 5替换子字符串Expression中的startIndex以返回大小你想要。作为参考,子字符串格式为:

length

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

嵌套的减法格式为:

substring(text, startIndex, length)

其中包括要从中减去的整数值(减数)和要减去的整数值(减去)。例如。 sub(minuend, subtrahend) 将返回sub(10, 2)的整数值。