Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Puppet中将字符串转换为整数_Puppet - Fatal编程技术网

如何在Puppet中将字符串转换为整数

如何在Puppet中将字符串转换为整数,puppet,Puppet,我试图在puppet中将基于时间的字符串转换为整数。 它在大多数情况下都能正常工作,除非时间少于10分钟,比如说08分钟。对于这些值,它抛出一个异常 Error: Evaluation Error: The value '08' cannot be converted to Numeric. 使用的代码 $minute_string = Timestamp.new.strftime("%M") #Tried the following and it did not work #$minute_i

我试图在puppet中将基于时间的字符串转换为整数。 它在大多数情况下都能正常工作,除非时间少于10分钟,比如说08分钟。对于这些值,它抛出一个异常

Error: Evaluation Error: The value '08' cannot be converted to Numeric. 使用的代码

$minute_string = Timestamp.new.strftime("%M") #Tried the following and it did not work #$minute_integer = $minute_string + 0 #Subsequently, attempted the following but it did not work either $minute_integer = Integer($minute_string) 这似乎是个问题。这是关闭的,因为不会这样做,但评论提供了一个解释和解决办法

简而言之,Puppet使用完全相同的规则将数字字符串转换为数字,它使用这些规则来转换数字文字,其中包括前导0x指示解释为十六进制,否则前导0指示解释为八进制。其他一些语言,如Ruby和C,也有相同的约定。但“8”和“9”不是有效的八进制数字,因此无法通过算术运算符或整数构造函数将字符串“08”和“09”直接转换为整数

建议的解决方案是使用scanf函数转换字符串:

$minute_integer = $minute_string.scanf('%d')[0]
使用这种格式,所有数字都将被解释为十进制,前导零没有特殊意义。函数返回一个数组,[0]当然会选择索引0处的元素。

这看起来像是一个问题。这是关闭的,因为不会这样做,但评论提供了一个解释和解决办法

简而言之,Puppet使用完全相同的规则将数字字符串转换为数字,它使用这些规则来转换数字文字,其中包括前导0x指示解释为十六进制,否则前导0指示解释为八进制。其他一些语言,如Ruby和C,也有相同的约定。但“8”和“9”不是有效的八进制数字,因此无法通过算术运算符或整数构造函数将字符串“08”和“09”直接转换为整数

建议的解决方案是使用scanf函数转换字符串:

$minute_integer = $minute_string.scanf('%d')[0]

使用这种格式,所有数字都将被解释为十进制,前导零没有特殊意义。函数返回一个数组,[0]当然会选择索引0处的元素。

一个解决方法是添加-而不是用零填充它。但是看看约翰的解决方案是否有效

$minute_string = Timestamp.new.strftime("%-M") ; notice("Current minute : $minute_string")
接受John的答案

一个解决方法是添加-而不是用零填充它。但是看看约翰的解决方案是否有效

$minute_string = Timestamp.new.strftime("%-M") ; notice("Current minute : $minute_string")
接受John的回答

不确定我做错了什么,但我收到错误:错误:计算错误:比较:数组>整数,不可能。原因是“只有字符串、数字、时间跨度、时间戳和版本是可比较的”。尝试了一些其他变体,但失败了scanf$minute\u string,%i scanf$minute\u string,%d@souser,看来我没有对PUP-6010问题中的上下文细节给予足够的关注。scanf返回一个数组,该数组在该上下文中不存在问题,但在您的上下文中,您应该使用索引运算符选择该数组中更新的第一个元素。这是适当的建议答案,在puppetlabs文档中引用,您也可以执行数学函数,例如$int=$string+0以获取整数。不确定我做错了什么,但我收到错误:错误:求值错误:无法比较:Array>integer。原因是“只有字符串、数字、时间跨度、时间戳和版本是可比较的”。尝试了一些其他变体,但失败了scanf$minute\u string,%i scanf$minute\u string,%d@souser,看来我没有对PUP-6010问题中的上下文细节给予足够的关注。scanf返回一个数组,该数组在该上下文中不存在问题,但在您的上下文中,您应该使用索引运算符选择该数组中更新的第一个元素。这是适当的建议答案,在puppetlabs文档中引用,您也可以执行数学函数,例如$int=$string+0以获取整数。