2016-01-26 41 views
-3

我有以下變量:我需要重命名剛創建的文件,但類型擴展名之前

filepath = "test.tmx" 

我需要在生成的文件名的末尾添加_out,但在此之前擴展名。到目前爲止,我寫了這個,但它不正確:

File.open(filepath+"-"+language_code+"_out", "w") 

任何想法?

+0

歡迎堆棧溢出。我們需要最少的樣本輸入。此外,您的代碼在語法上不正確。請修復它。請參閱「[問]」和「[mcve]」。另外,由於TMX是一種XML格式,你不應該嘗試使用正則表達式,你應該使用像[Nokogiri](http://nokogiri.org)這樣的解析器。 –

回答

-1

您編輯的問題的答案很簡單。

filepath = "test.tmx" 
filepath_before_extension = File.basename(filepath, '.tmx') 
# => "test" 

puts "#{filepath_before_extension}_out.tmx" 
# => test_out.tmx 

或者:

puts filepath.sub(/\.tmx$/, '_out.tmx') 
# => test_out.tmx 

回答你原來的問題是,只是稍微複雜。

如果我理解正確你想結合filepathlanguage_code形成這樣的文件名:

adidas_174_Generic-en-AR_out.tmx 

...而是你得到這樣的:

adidas_174_Generic.tmx-en-AR_out 

在這種情況下,它是相同的,除了你添加language_code到輸出:

language_code = "es-AR" 
filepath = "adidas_174_Generic.tmx" 
filepath_before_extension = File.basename(filepath, '.tmx') 
# => "adidas_174_Generic" 

puts "#{filepath_before_extension}-#{language_code}_out.tmx" 
# => adidas_174_Generic-es-AR_out.tmx 

或者:

puts filepath.sub(/\.tmx$/, "-#{language_code}_out.tmx") 
# => adidas_174_Generic-es-AR_out.tmx 
+0

親愛的downvoter:請留下評論,解釋你downvote的原因。如果我的答案缺乏,我希望有機會改進它。 –

1

首先,文件extensionbasename提取到幾個變量:

# Get the file extension 
ext = File.extname(filepath) 

# Get the file's basename (without extension) 
basename = File.basename(filepath, '.*') 

然後你就可以使用它們構建新的文件名:

File.open(basename + language_code + '_out' + ext, 'w') 
0

解析你的文件名使用標準庫的File將擴展名與擴展名分開,然後重新確定。

這應該工作:

languages_list = ["es-AR", "es-CL", "es-CO", "es-MX", "es-PE"] 
filepath = "adidas_174_Generic.tmx" 
text = File.read(filepath) 

languages_list.each do |language_code| 
    puts language_code 
    replace = text.gsub('<tuv xml:lang="es-PA">', "<tuv xml:lang=\"#  {language_code}\">") 

    file_base = File.basename filepath, ".*" 
    file_extension = File.extname filepath 

    new_file_path = file_base+language_code+"_out"+file_extension 

    File.open(new_file_path, "w") {|file| file.puts replace} 
相關問題