2017-10-06 41 views
0

我得到了一個ruby腳本,它採用XML文件並從它們創建CSV。這個CSV使用分號作爲分隔符 - >但是,XML的內容包含這些標籤:在Ruby中從CSV中刪除具體字符串

- & 
- < 
- > 

而這當然打破了CSV文件的結構。我需要清理它。這種清潔劑必須在Ruby中書寫。我嘗試下一個代碼,但是這完全破壞了文件。

#Clean up CSV file 
#Remove: & \< > 

file_names = ['terms.csv'] 

file_names.each do |file_name| 
    text = File.read(file_name) 
    new_contents = text.gsub(/&/, " and ") 

    # To merely print the contents of the file, use: 
    puts new_contents 

    # To write changes to the file, use: 
    File.open(file_name, "w") {|file| file.puts new_contents } 
end 

file_names.each do |file_name| 
    text = File.read(file_name) 
    new_contents = text.gsub(/&lt;/, " < ") 

    puts new_contents 

    File.open(file_name, "w") {|file| file.puts new_contents } 
end 

file_names.each do |file_name| 
    text = File.read(file_name) 
    new_contents = text.gsub(/&gt;/, " > ") 

    puts new_contents 

    File.open(file_name, "w") {|file| file.puts new_contents } 
end 

我從來不使用Ruby--這是我的第一次接觸。有更好的方法如何做到這一點?

回答

0

我會假設&和其他列出的「挑戰」在你描述它們時被包含在標籤中,因爲你用你試圖通過簡單地將它們作爲原始數據去除的XML文件解析你的xml文件。

如果您使用像'nokogiri'這樣的gem它專門爲解析xml文件而設計,您可能會受益於使用它輸出正確解析的文檔,方法是通過輸出文本以您希望的方式進行格式化。

由於你的.gsub試圖替換你的方式,你將不得不使用正則表達式,如果你正在做內聯,你可以做什麼,如果你沒有正則表達式的解決方案(我不能提供一個正則表達式一個在這一點上作爲它不是一個區域我在紅寶石探討了很多尚)

你可以嘗試這樣的:

# load the file as a string 
data = File.read("hello.csv") 

arg1 = "&amp;" 

rem_data = data.gsub(arg1, " AND ") 
# # open the file for writing 
File.open("hello.csv", "w") do |f| 
    f.write(rem_data) 
end 

希望這有助於!這工作至少在我的測試文檔上。如果你有任何問題,它可能有助於張貼你正在解析的一些輸入。

+0

這應該是一條評論。或者給出更多關於如何使用它的解釋。 – Toto

+0

是的,原始腳本使用Nokogiri,但我不能改變它。我需要使用最終的CSV並從該文件中刪除這些標籤。 PS:XML文件在內容部分包含這些標籤。 – Firejs

+0

@Toto這是正確的,但我沒有足夠的傷心,重新提交我的提交。謝謝你的評論:D Firejs給了一個去! – Juksefantomet

0

我解決了它...我從「;」更改CSV分隔符到FOR循環中的「#」,創建一個CSV文件。這不是理想的解決方案,但它的工作原理。