Ruby-在循环中每次都要切掉字符串的结尾

Ruby-在循环中每次都要切掉字符串的结尾,ruby,file,loops,Ruby,File,Loops,我的Ruby脚本有问题。我正在从文件中读取文本,我想去掉某些字符 My file.rb包含以下内容: 打印“你好!” 打印“你好吗?” 解释起来不太容易,下面是代码: File.open("file.rb").each do |line| line = line[6..line.length] line = line[0...-1] end 这应该返回: 你好 你好吗? 然而,我得到: 你好" 你好吗? 我做了一些测试,发现只有文件中的最后一行删除了最后一个字符 我真的很感谢你的帮助 谢谢

我的Ruby脚本有问题。我正在从文件中读取文本,我想去掉某些字符

My file.rb包含以下内容:

打印“你好!”
打印“你好吗?”

解释起来不太容易,下面是代码:

File.open("file.rb").each do |line|

line = line[6..line.length]
line = line[0...-1]

end
这应该返回:

你好
你好吗?

然而,我得到:

你好"
你好吗?

我做了一些测试,发现只有文件中的最后一行删除了最后一个字符

我真的很感谢你的帮助

谢谢,
Reece

有多种方法可以做到这一点。我将假设,通过您当前的实现,创建多个临时字符串来获取字符串,这不是一个高性能的关键部分,使用正则表达式将是完全可以接受的,甚至可能会提高速度/效率

只要文件中的所有行都遵循目标字符串用双引号括起来的模式(
“target string”
),就可以使用以下内容:

File.readlines('file.rb').map { |line| line[/\"(.*)\"\s?$/, 1] }.compact
这将返回一个字符串数组,其中每个元素都是所需字符串的一部分。
compact
通过删除
nil
值来处理不匹配的行或空行

如果不需要存储这些值,可以在循环中简单地实现:

File.open('file.rb').each do |line|
  next unless line = line[/\"(.*)\"\s?$/, 1]

  # Line is now just the string without quotes
  puts line

end
另一种可能的变体可能用于仅匹配打印语句(如果文件包含除
print
行以外的其他文本)


^print\”(.*)“\s?$

尝试以下方法:
放置line.chomp[7..line.length-3]
。或
放置line.chomp[7…-1]
。是否需要引号内的文本?