插入String并保留原始变量状态

时间:2015-07-29 18:50:17

标签: ruby regex string

我根据从数据库转储生成的名称的文本文件重命名文件。我正在进行目录列表并检查它们是否包含" _P2.PSD"。如果文件包含该子字符串,则循环遍历下划线可能存在的3个不同位置,并查看该字符串是否存在于文件中。如果我根据文件内容找到匹配项,我将使用该格式重命名图像。

以下是代码的一部分:

Dir.glob("#{directory}").each do |file|
  if "#{file.include? ("_P2")}" == "true"
    if File.readlines("#{db_Dump}").grep(/#{file.insert(-11, '_')}/).size > 0
      logger.info{"#{file}"}
      #mod_file =   file.insert(-11, '_')
      #logger.info{"#{file} -> #{mod_file}"}
    elsif File.readlines("#{db_Dump}").grep(/#{file.insert(-10, '_')}/).size > 0
      logger.info{"#{file}"}
      #mod_file =   file.insert(-10, '_')
      #logger.info{"#{file} -> #{mod_file}"}
    elsif File.readlines("#{db_Dump}").grep(/#{file.insert(-9, '_')}/).size > 0
      logger.info{"#{file}"}
      #mod_file =   file.insert(-9, '_')
      #logger.info{"#{file} -> #{mod_file}"}
    else
      logger.info{"NO_UNDERSCORE_PLACEMENT_FOUND -> #{file}"}
    end
  end
end

真正的问题:

irb(main):001:0> bob="ThisIsDefaultText"
=> "ThisIsDefaultText"
irb(main):002:0> puts bob.insert(-5,'_')
ThisIsDefault_Text
=> nil
irb(main):003:0> puts bob
ThisIsDefault_Text
=> nil
irb(main):004:0>

1 个答案:

答案 0 :(得分:3)

bob = "ThisIsDefaultText"
puts bob.dup.insert(-5, '_')
#=> ThisIsDefault_Text
puts bob
#=> ThisIsDefaultText

String父对象有一个重复的方法.dup将“生成一个浅拷贝”。