尝试获取Ruby中变量的长度时出错
我有一个header方法,可以将标准的header写入我抛出的所有文本文件。代码如下:尝试获取Ruby中变量的长度时出错,ruby,string,string-length,Ruby,String,String Length,我有一个header方法,可以将标准的header写入我抛出的所有文本文件。代码如下: def header(file, description) File.open(file, 'w') do |out| out.puts ".------------------------------------------------------------------------." out.puts "| File generated by: " + Etc.g
def header(file, description)
File.open(file, 'w') do |out|
out.puts ".------------------------------------------------------------------------."
out.puts "| File generated by: " + Etc.getlogin() + " " * (52-Etc.getlogin().length) + "|"
out.puts "| File generated at: " + Time.now().to_s() + " |"
out.puts ".------------------------------------------------------------------------."
out.puts "| DESCRIPTION: |"
out.puts "| " + description.to_s + " " * (70-description.length) + "|"
out.puts "| |"
out.puts "'------------------------------------------------------------------------'"
out.puts "=====FINDINGS====="
end
end
因此,当我运行以下call语句时:
header('01httpserver.txt', "This file details all configuration files with where http servers are concerned.")
我得到以下错误:
cis.rb:63:in `*': negative argument (ArgumentError)
from cis.rb:63:in `block in header'
from cis.rb:57:in `open'
from cis.rb:57:in `header'
from cis.rb:70:in `<main>'
我做错了什么?问题是您的描述超过70个字符,因此您将字符串乘以负值,这是不允许的 要解决此问题,请将出现错误的行更改为:
out.puts "| " + description.to_s + " " * [0, (70-description.length)].max + "|"
问题是您的描述超过70个字符,因此您将字符串乘以负值,这是不允许的 要解决此问题,请将出现错误的行更改为:
out.puts "| " + description.to_s + " " * [0, (70-description.length)].max + "|"
如果您想进行字符串填充,那么为什么不使用
sprint
表示法呢
out.puts "| %-70s|" % description.to_s
这就使用了这个方法。
%-70s
表示填充字符串到70个空格,左对齐。没有-
,它是右对齐的
任何过长的值都将溢出此点。要处理这个问题:
out.puts "| %-70s|" % description.to_s[0,70]
这应该限制在前70个字符。在Rails环境中有一个名为的方法,它可以添加省略号来显示发生的截断。如果您想进行字符串填充,那么为什么不使用
sprint
表示法呢
out.puts "| %-70s|" % description.to_s
这就使用了这个方法。
%-70s
表示填充字符串到70个空格,左对齐。没有-
,它是右对齐的
任何过长的值都将溢出此点。要处理这个问题:
out.puts "| %-70s|" % description.to_s[0,70]
这应该限制在前70个字符。在Rails环境中,有一个名为的方法,可以添加省略号来显示发生的截断。。谢谢是的,就是这样。谢谢