如何读取一个文件的内容,然后将内容拆分成几个文件?
How to read content of a file and then split the content into several files?
假设,我有一个包含以下文本的文件:
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' 出现。
你会怎么做?
这是一个ruby解决方案:
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
假设,我有一个包含以下文本的文件:
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' 出现。
你会怎么做?
这是一个ruby解决方案:
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