如何在 Ruby 中编辑 txtfile 中的每 x 行?

Mel*_*bel 1 ruby

我正在尝试使用 Ruby 更改文本文件中每隔一行的内容(有些文本文件我需要每隔三行更改一些内容,依此类推。)

我发现这个问题有助于迭代每一行,但我特别需要帮助每 x 行进行更改。

###是我遇到问题的部分(迭代 x 行数。)

text = File.open('fr.txt').read
clean = ### .sub("\n", " ");
new = File.new("edit_fr.txt", "w")
new.puts clean
new.close
Run Code Online (Sandbox Code Playgroud)

Gro*_*ify 5

您可以使用如下模数除法,其中n指的是您要处理的第 n 行,并i指的是文件行的从 0 开始的索引。使用这两个值,模数学提供整数除法的余数,只要基于 1 的索引 ( i+1) 是 的倍数,该余数将为 0 n

n = 3 # modify every 3rd line

File.open('edit_fr.txt','w') do |f|               # Open the output file
  File.open('fr.txt').each_with_index do |line,i| # Open the input file
    if (i+1) % n == 0                             # Every nth line
      f.print line.chomp                          # Remove newline
    else                                          # Every non-nth line
      f.puts line                                 # Print line
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

维基百科上提供了更多信息:http : //en.wikipedia.org/wiki/Modulo_operation

在计算中,模运算求出一个数除以另一个数后的余数(有时称为模数)。

给定两个正数,a(被除数)和 n(除数),模 n(缩写为 mod n)是 a 除以 n 的余数。例如,表达式“5 mod 2”的计算结果为 1,因为 5 除以 2 得出的商为 2,余数为 1,而“9 mod 3”的计算结果为 0,因为 9 除以 3 有一个商3 的余数为 0;3 乘以 3 后,9 没有任何减法。(注意,用计算器进行除法不会显示此操作所指的结果;商将表示为小数。)