Ruby-在循环中每次都要切掉字符串的结尾
我的Ruby脚本有问题。我正在从文件中读取文本,我想去掉某些字符 My file.rb包含以下内容: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 这应该返回: 你好 你好吗? 然而,我得到: 你好" 你好吗? 我做了一些测试,发现只有文件中的最后一行删除了最后一个字符 我真的很感谢你的帮助 谢谢
打印“你好!”
打印“你好吗?”
解释起来不太容易,下面是代码:
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]
。是否需要引号内的文本?