使用ruby在文本文件中写入特定位置

时间:2017-06-07 22:03:50

标签: ruby file rubygems faker

我想在文本文件中的特定位置插入数据,比如从第10行开始的第1行,如何使用ruby进行操作? 我还想使用fakker gem或其他任何可能的方式将伪数据传递到此文件中。比如发送电话号码,姓名,SSN等。

1 个答案:

答案 0 :(得分:0)

这是一个示例脚本,它接受两个参数并将第一个文件内容的修改后的副本写入第二个文件:

require 'faker'

input  = File.open(ARGV[0], 'r')

lines = input.readlines
lines[0].gsub!(/^(.{0,10})/, '\1' + Faker::Base.numerify('###').to_s)

output = File.open(ARGV[1], 'w')
lines.each do |line|
  output.write(line)
end

如果您的输入文件如下所示:

12345678901234567890
          ^^^ fake data

输出可能如下所示:

12345678909451234567890
          ^^^ fake data

由于我在读取输入文件后打开了输出文件,因此您可以传递与第一个和第二个参数相同的文件名。这并不是完全将字符串插入到文件中,但它就像你得到的那样接近。

关键是:

lines[0].gsub!(/^(.{0,10})/, '\1' + Faker::Base.numerify('###').to_s)

它取第一行并替换一个随机的3位整数。如果第一行中的字符少于10个,它会将随机数据附加到行的末尾。如果您不想替换,可能需要删除正则表达式中范围的开头:

/^(.{10})/

或者也许做其他事情if lines[0].length < 10