Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从另一个文本文件的行创建新文件(名称)_Ruby_File_Filenames - Fatal编程技术网

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]/, '')