如何在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_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函数转换字符串:如何在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
$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以获取整数。