2014-11-25 33 views
0

我產生由mysqldump的命令.sql文件:如何用ruby修改.sql文件?

system "mysqldump -u#{USERNAME} --password=#{PASSPORT} --extended-insert #{DATABASE} #{table_name} > init_#{table_name}.sql" 

的.sql文件看起來是這樣的:

..... 
..... 
LOCK TABLES `config_products` WRITE; 
/*!40000 ALTER TABLE `config_products` DISABLE KEYS */; 
INSERT INTO `config_products` VALUES (1,1000,30,54),(2,2000,30,56),(3,3000,30,51),(4,1000,30,54).... 
..... 
..... 

所有數據合併成一條線,但我希望它看起來像它:

..... 
..... 
LOCK TABLES `config_products` WRITE; 
/*!40000 ALTER TABLE `config_products` DISABLE KEYS */; 
INSERT INTO `config_products` VALUES 
    (1,1000,30,54), 
    (2,2000,30,56), 
    (3,3000,30,51), 
    (4,1000,30,54).... 
..... 
..... 

有什麼簡單的方法可以做到嗎?

回答

1

您可以使用gsub,並使用newline,一個tab和支架本身替換左括號。
你要麼寫之前或閱讀

text = "INSERT INTO `config_products` VALUES (1,1000,30,54),(2,2000,30,56),(3,3000,30,51),(4,1000,30,54)...." 

newtext = text.gsub(/\(/,"\n\t(") 
#INSERT INTO `config_products` VALUES 
#  (1,1000,30,54), 
#  (2,2000,30,56), 
#  (3,3000,30,51), 
#  (4,1000,30,54).... 

UPDATE 由於這是一個系統的任務完成後,你可以做到這一點做到這一點,紅寶石控制檯,或者如果你的某個地方寫一個輔助方法將會使用很多。

def export_formatted_sql(DATABASE,table_name,USERNAME,PASSWORD) 
    system "mysqldump -u#{USERNAME} --password=#{PASSPORT} --extended-insert #{DATABASE} #{table_name} > init_#{table_name}.sql" 
    file = File.open("init_#{table_name}.sql","r") 
    newtext = file.read.gsub(/\(/,"\n\t(") 
    file.close 
    file = File.open("init_#{table_name}.sql","w") # overwrite the existing file 
    file.write newtext 
    file.close 
end 
0

退房這種寶石一次,可能會對你有所幫助:

anbt-sql-formatter

0

我找到了一個簡單的方法來做到這一點。我們可以通過「sed」命令直接獲取目標文件。

system "mysqldump -u#{USERNAME} --password=#{PASSPORT} --extended-insert #{DATABASE} #{table_name} | sed 's/),/),\\'$'\\n/g' > init_#{table_name}.sql"