Вот класс случайных строк. Вы создаете новый объект randomline, передавая ему имя входного файла и имя выходного файла. Затем вы можете вызвать метод deleterandom для этого объекта и передать ему ряд строк для удаления.
Данные хранятся внутри массивов, а также помещаются в файл. В настоящее время вывод находится в режиме добавления, поэтому если вы используете тот же файл, который он просто добавит в конец, вы можете изменить a на w, если хотите каждый раз запускать файл заново.
class Randomline
attr_accessor :inputarray, :outputarray
def initialize(filein, fileout)
@filename = filein
@filein = File.open(filein,"r+")
@fileoutput = File.open(fileout,"a")
@inputarray = []
@outputarray = []
readin()
end
def readin()
@filein.each do |line|
@inputarray << line
end
end
def deleterandom(numtodelete)
numtodelete.times do |num|
random = rand(@inputarray.size)
@outputarray << inputarray[random]
@fileoutput.puts inputarray[random]
@inputarray.delete_at(random)
end
@filein = File.open(@filename,"w")
@inputarray.each do |line|
@filein.puts line
end
end
end
вот пример его использования
a = Randomline.new("testin.csv","testout.csv")
a.deleterandom(3)