我正在尝试使用 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)
您可以使用如下模数除法,其中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 没有任何减法。(注意,用计算器进行除法不会显示此操作所指的结果;商将表示为小数。)