在array.each中附加到f时,不需要的换行符为| f |

时间:2014-06-26 12:02:10

标签: ruby

为什么以下代码:

#!/usr/bin/ruby
replacements = ['A1', 'E1', 'I1', 'Y1', 'U1', 'O2', 'O1', 'Ae', 'D1', 'Th', 'o1', 'u1', 'y1', 'ae', 'a1', 'i1', 'th', 'd1', 'o2']
contentsArray = File.readlines(ARGV[0])
wordArray = []
existingWords = []
contentsArray.each do |i|
  i.capitalize!
  i<<"_setn.caf"
  open("hljodsetn_final", "a") do |f|
    puts i
  end
end

产生这种输出

someString1 
_setn.caf
someString2 
_setn.caf
someString1
_setn.caf

我期待的地方

someString1_setn.caf
someString2_setn.caf
someString3_setn.caf

当我直接尝试类似的事情,例如array.each do |f|并通过"someString"f追加到f<<"someString"时,它似乎完美无缺,但在此文件资本化的读取实例中并非如此每个,然后附加以"_"开头的字符串。

真的很感激一些见解!

2 个答案:

答案 0 :(得分:1)

您从文件中读取行。每条线自然以换行符结束。然后将文字追加到其后面。

"someString1\n" << "_setn.caf" # => "someString1\n_setn.caf"

你可以摆脱这样的新行,例如:

contentsArray = File.readlines(ARGV[0]).map(&:chomp)

答案 1 :(得分:1)

File.readlines创建一个行数组,这些行都以换行符结尾(这就是它知道在哪里识别行尾)。

i.capitalize!.chomp! 

这将摆脱换行符。