如何阅读文件内容然后将内容拆分成多个文件?

时间:2016-05-29 16:19:48

标签: ruby regex rubygems

假设我有一个包含以下文字的文件:

old_file

create_table "users", force: :cascade do |t|
  t.string "name"
end

create_table "animals", force: :cascade do |t|
  t.string "kind"
end

我需要拆分此文件,以便在不同的文件上创建每个 create_table 块。例如:

文件1

create_table "users", force: :cascade do |t|
  t.string "name"
end

file2的

create_table "animals", force: :cascade do |t|
  t.string "kind"
end

我可以读取文件,然后将其分配给某个变量

string = File.open('old_file', 'r'){ |file| file.read }

但是我无法绕过下一步该做的事情。

也许我可以使用正则表达式来识别每次新的' create_table' 标题,然后以某种方式创建新文件,将内容写入其中并关闭文件直到下一个' create_table' 出现。

你会怎么做?

2 个答案:

答案 0 :(得分:4)

这是一个红宝石解决方案:

index = 0                                                                                                                                                                                                                                
IO.foreach("old_file.rb") do |line|                                                                                                                                                                                                      
  index += 1 if line =~ /^create_table/                                                                                                                                                                                                  
  File.open("file#{index}", 'a') do |f|                                                                                                                                                                                                  
    f.write(line)                                                                                                                                                                                                                        
  end                                                                                                                                                                                                                                    
end      

答案 1 :(得分:0)

如果它们总是由一个空行分隔的三行块,则可以使用split(1)实用程序:

perl