Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ruby在文本文件中的特定位置写入_Ruby_File_Rubygems_Faker - Fatal编程技术网

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

使用ruby在文本文件中的特定位置写入,ruby,file,rubygems,faker,Ruby,File,Rubygems,Faker,我想在文本文件中的特定位置插入数据,如从位置10开始的第1行,如何使用ruby来完成? 我还想通过fakker gem或任何其他可能的方式将假数据传递到此文件。例如发送电话号码、姓名、SSN等。下面是一个示例脚本,它接受两个参数并将第一个文件内容的修改副本写入第二个文件: require 'faker' input = File.open(ARGV[0], 'r') lines = input.readlines lines[0].gsub!(/^(.{0,10})/, '\1' + Fa

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

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

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})/

如果第[0]行的长度小于10,则可以执行其他操作。

可以覆盖文本文件中的文本,但不能在不移动文件中其他文本的情况下插入文本。标准方法是使用插入的文本创建新文件。然后,您可以选择删除原始文件,并将新文件重命名为原始文件的名称。有什么原因不想做后者吗?欢迎来到堆栈溢出。请阅读并阅读他们的链接页面。你的问题离题了:你要求我们写一篇教程来解释这些问题,以及如何写,然而,这些信息已经存在于许多地方。是很重要的。我曾尝试在“SO”上找到它,但所有的问题都涉及到在文件中写入数据或替换文件中的数据,但我无法找到任何涉及在特定位置输入数据的问题。因此发布了这篇文章。我知道我们可以读取文件中的字符串,例如file.openfile|u path,'r'do | f | f.readlines.each do | row | x=row[4,2]。以类似的方式剥离,我想在第4行中写入两个字符的字符串。@Ruby|u学习者:没问题!请看。谢谢