繁体   English   中英

Ruby多条件语句两次写入同一文件?

Ruby mulitple conditional statment write to same file twice?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试在ruby中创建查找和替换脚本。 但是当有两个条件匹配(找到2个不同的正则表达式模式并需要在同一文件中替换)时,我无法弄清楚如何两次写入同一文件。我可以得到它提供仅被合并的文件的2个副本每个条件都由一种条件引起的变化。

这是我的代码(特别是pattern3和pattern4):

print "What extension do you want to modify? "
ext = gets.chomp

if ext == "py"
    print("Enter password: " )
    pass = gets.chomp

elsif ext == "bat"  
    print "Enter drive letter: "
    drive = gets.chomp
    print "Enter IP address and Port: "
    ipport = gets.chomp
end

pattern1 = /'Admin', '.+'/
pattern2 = /password='.+'/
pattern3 = /[a-zA-Z]:\\(?i:dir1\\dir2)/
pattern4 = /http:\/\/.+:\d\d\d\d\//


Dir.glob("**/*."+ext).each do |file|
        data = File.read(file)
            File.open(file, "w") do |f|
                if data.match(pattern1)
                    match = data.match(pattern1)
                      replace = data.gsub(pattern1, '\''+pass+'\'')  
                    f.write(replace)
                    puts "File " + file + " modified " + match.to_s
                elsif data.match(pattern2)
                    match = data.match(pattern2)
                      replace = data.gsub(pattern2, 'password=\''+pass+'\'')  
                    f.write(replace)
                    puts "File " + file + " modified "  + match.to_s
                end

                if data.match(pattern3)
                   match = data.match(pattern3)
                       replace = data.gsub(pattern3, drive+':\dir1\dir2')  
                     f.write(replace)
                     puts "File " + file + " modified "  + match.to_s
                if data.match(pattern4)
                     match = data.match(pattern4)
                       replace = data.gsub(pattern4, 'http://' + ipport + '/')  
                     f.write(replace)
                     puts "File " + file + " modified "  + match.to_s   
          end
    end
    end
end

f.truncate(0)使情况变得更好,但由于第一行从文件的第一个修改部分的结尾处合并而截断了第一行。

1 个回复

尝试在所有替换之后仅写入一次文件:

print "What extension do you want to modify? "
ext = gets.chomp

if ext == "py"
    print("Enter password: " )
    pass = gets.chomp

elsif ext == "bat"  
    print "Enter drive letter: "
    drive = gets.chomp
    print "Enter IP address and Port: "
    ipport = gets.chomp
end

pattern1 = /'Admin', '.+'/
pattern2 = /password='.+'/
pattern3 = /[a-zA-Z]:\\(?i:dir1\\dir2)/
pattern4 = /http:\/\/.+:\d\d\d\d\//


Dir.glob("**/*.#{ext}").each do |file|
    data = File.read(file)
    data.gsub!(pattern1, "'#{pass}'")
    data.gsub!(pattern2, "password='#{pass}'")
    data.gsub!(pattern3, "#{drive}:\\dir1\\dir2")  
    data.gsub!(pattern4, "http://#{ipport}/")
    File.open(file, 'w') {|f| f.write(data)}
end
2 ruby if js.erb文件的陈述

任何人都可以协助我设置我的js.erb文件以涵盖两种情况。 目前,当页面最初加载时,我可以进行无限滚动,但是当我更改参数时,新集合可以很好地加载,但是当我向下滚动页面以加载其余结果时,我仅获得下一组6个对象来替换最后,而不是将它们附加到末尾 rehome.js.erb Jav ...

4 使用ruby在同一个excel文件上读取和写入

我正在寻找一种在ruby中读取和写入相同excel文件的方法。 我看到了这个话题,但这些建议对我不起作用。 我试图使用Roo gem,但这不允许写。 我也尝试使用Spreadsheet gem,但这不会读取Xlsx文件。 有没有办法在ruby中读取和写入相同的excel文件? ...

5 红宝石读取和写入/更改同一文件

我正在尝试更改现有文件的内容。 我有这段代码,可以正常工作。 但是我想找到一种更好的方法来一次打开文件。 有什么方法可以只打开一次文件吗? 我尝试使用File.open(file_name , 'r+') ,它似乎仅附加到文件的末尾(无法在文件的开头插入内容)。 ...

2014-07-23 00:23:15 3 1963   ruby
7 在 Ruby 中两次定义同一个类

以下代码有效,但我不明白为什么。 我有两个文件。 第一个是名为walmart.rb的类,位于active_market/walmart.rb 。 这是类定义: 对于我的Walmart类,我有 Walmart API 的“API 实现”,例如 Order、Fulfillment、Report 等。 ...

2020-04-10 18:31:18 2 125   ruby
9 Xml写两次相同的东西

我正在寻找解决这个问题的方法。 当我尝试写入xml文件时,它会写两次相同的东西。 它是代码: 如果我有带有此标签的xml文件,并且编写了新标签(例如“ Question-3”,Example3“ / Question-3”),则会遇到问题 XmlFile被写入之前: ...

10 图像地图热点中的条件语句?

这甚至可能吗? 仅当 pt = 1 时单击图像地图上的特定热点时,我才想跳转到标签 pt 在脚本中定义为默认值,我认为这是定义数字的最佳/唯一方法。 但我得到的错误是: u'jump' 不是 imagemap 语句的关键字参数或有效子项。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM