我正在尝试编写一个非常简单的 ruby 脚本,该脚本打开一个文本文件,从行尾删除 \n,除非该行以非字母字符开头或该行本身为空白 (\n)。
下面的代码工作正常,只是它跳过了最后 \n 行之外的所有内容。当我将 \n\n 添加到文件末尾时,它可以完美运行。示例:包含此文本的文件效果很好,并将所有内容拉到一行:
Hello
there my
friend how are you?
变成Hello there my friend how are you?
但是这样的文字:
Hello
there
my friend
how
are you today
只返回Hello
and There
,并完全跳过最后 3 行。如果我在末尾添加 2 个空行,它将拾取所有内容并按照我的意愿行事。
谁能向我解释为什么会这样?显然我知道我可以通过\n\n
在开始时附加到源文件的末尾来修复这个实例,但这并不能帮助我理解为什么.gets
它没有像我预期的那样工作。
提前感谢您的帮助!
source_file_name = "somefile.txt"
destination_file_name = "some_other_file.txt"
source_file = File.new(source_file_name, "r")
para = []
x = ""
while (line = source_file.gets)
if line != "\n"
if line[0].match(/[A-z]/) #If the first character is a letter
x += line.chomp + " "
else
x += "\n" + line.chomp + " "
end
else
para[para.length] = x
x = ""
end
end
source_file.close
fixed_file = File.open(destination_file_name, "w")
para.each do |paragraph|
fixed_file << "#{paragraph}\n\n"
end
fixed_file.close