【发布时间】:2014-05-16 15:11:41
【问题描述】:
我的任务:
编写一个程序来使用正则表达式重命名文件。这 程序将采用三个命令行参数: 重命名文件,匹配文件的正则表达式 重命名,并用一个字符串替换正则表达式匹配。这 主要用途是更改文件扩展名,但它应该能够 处理替换文件名的任何部分。它应该运行为 如下:
./fixname.rb dir 'pattern' replacement
我写的程序是:
puts "Renaming files..."
folder_path = ARGV[0]
reg_exp = ARGV[1].to_regexp
Dir.glob(folder_path + "/*").sort.each do |f|
filename = File.basename(f, File.extname(f))
myString = String.new
myString = filename
filename = myString.gsub(reg_exp, ARGV[2])
#puts myString
File.rename(f, folder_path + "/" + filename + File.extname(f))
end
puts "Renaming complete."
当我使用正则表达式时,重命名不会发生,否则它正在工作。我得到:
error "`gsub': no implicit conversion of nil into String (TypeError)"
【问题讨论】:
-
我不会做你的作业。
-
你应该可以在这里找到你需要的一切:link
-
如果您诚实地自己开始工作,但不知何故被卡住了,那么请提出一个新问题:发布您到目前为止的代码并解释您不理解的内容,这很可能你会在这里得到帮助。因此,您仍然可以在作业方面获得帮助,只是没有一次性为您完成所有作业。
-
如何写文件名[reg_exp] = ARGV[2].
-
@user3497652:感谢您的编辑。你能解释一下出了什么问题吗?它看起来像脚本类型的作品,但当您使用正则表达式语法时,重命名可能不会发生(您正在执行完全匹配替换)。对吗?