【问题标题】:Creating a new file (name) from a line of another text file从另一个文本文件的一行创建一个新文件(名称)
【发布时间】:2012-09-07 21:24:50
【问题描述】:

你能告诉我为什么这段代码会出错吗?

我不明白这一行: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
}

谢谢-Mike W

【问题讨论】:

  • 注意:您对File.new 的使用使文件句柄保持打开状态,直到脚本退出。不过,在短命的脚本中没什么大不了的。

标签: ruby file filenames


【解决方案1】:

代码设计为在 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/, '')

我怀疑是换行符导致了错误。

更新:

我在 Windows 上进行了测试,确实是回车 (\r) 和换行 (\n) 导致了问题。我得到Errno::EINVAL: Invalid argument。

这应该可以通过删除所有空格来解决它:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多