2012-09-07 149 views
1

你能告訴我爲什麼這段代碼給出錯誤嗎?從另一個文本文件的一行創建一個新文件(名稱)

我不理解這行:File.new("#{line}", "w")

system "ipconfig /all > info.txt" 
info_text = File.open("info.txt") 
info_text.each { |line| 
    if line =~ /Physical Address/ 
    line.slice! " Physical Address. . . . . . . . . : " 
    File.new("#{line}", "w") 
    end 
} 

感謝-MikeW¯¯

+0

注:您的'使用File.new'保持文件句柄開放,直到腳本退出。雖然短命的腳本並不是什麼大不了的。 – Kelvin

回答

0

的代碼被設計爲在Microsoft Windows上運行。該腳本不會對其他操作系統有用。特別是,它會嘗試使用MAC地址爲系統上的每個網絡適配器創建一個空文件。

很可能line包含Windows不允許在文件名中包含的字符。 (Windows比Linux或Mac OS X更具有限制性。)您遇到的錯誤是什麼?

此外,請在致電File.new之前立即嘗試打印line變量以查看其中包含的內容。

您可能需要通過刪除無效字符來清理line。有關不允許的內容,請參閱this answer。簡單的方法是使用一個簡單的白名單:

# remove non-alphanumeric and non-underscore 
line.gsub!(/\W/, '') 

我懷疑這是導致錯誤的換行符。

UPDATE:

我做了Windows上的測試,它的的確回車(\r)和換行(\n)導致的問題。我得到Errno::EINVAL: Invalid argument

這應該修復它,通過刪除所有空白:

line.gsub!(/[\s]/, '') 
+0

感謝line.gsub!(/ [\ s] /,'')解決了這個問題。 – Mike

相關問題