Ruby 从另一个文本文件的行创建新文件(名称)
你能告诉我为什么这个代码会出错吗 我不理解这一行:Ruby 从另一个文本文件的行创建新文件(名称),ruby,file,filenames,Ruby,File,Filenames,你能告诉我为什么这个代码会出错吗 我不理解这一行:File.new(“{line}”,“w”) 谢谢-Mike W该代码设计用于在Microsoft Windows上运行。该脚本在其他操作系统上不会做任何有用的事情。特别是,它尝试使用MAC地址为系统上的每个网络适配器创建一个空文件 很可能行包含Windows不允许在文件名中使用的字符。(Windows比Linux或Mac OS X限制性更强)您遇到了什么错误 另外,在调用File.new之前,请立即打印行变量,查看它包含的内容 您可能需要通过删
File.new(“{line}”,“w”)
谢谢-Mike W该代码设计用于在Microsoft Windows上运行。该脚本在其他操作系统上不会做任何有用的事情。特别是,它尝试使用MAC地址为系统上的每个网络适配器创建一个空文件 很可能
行
包含Windows不允许在文件名中使用的字符。(Windows比Linux或Mac OS X限制性更强)您遇到了什么错误
另外,在调用File.new
之前,请立即打印行
变量,查看它包含的内容
您可能需要通过删除无效字符来清理行
。看看什么是不允许的。简单的方法是使用一个简单的白名单:
# remove non-alphanumeric and non-underscore
line.gsub!(/\W/, '')
我怀疑是新行引起了这个错误
更新:
我在Windows上做了一个测试,确实是回车(\r
)和换行(\n
)导致了问题。我得到Errno::EINVAL:无效参数
这应该通过删除所有空白来修复它:
line.gsub!(/[\s]/, '')
注意:使用
File.new
会使文件句柄保持打开状态,直到脚本退出。不过,在一个短命的剧本中,这并不是什么大事。
line.gsub!(/[\s]/, '')