【问题标题】:Go to next lines when reading a file in Ruby在 Ruby 中读取文件时转到下一行
【发布时间】:2014-09-15 17:29:56
【问题描述】:

我正在逐行读取文件。 当我找到一个特定的字符串时,我想分析以下几行,直到出现一个特定的字符。 在混凝土中。这是我的输入文件:

 blabbal
 blabbalb
 blablab
 info {
     (bbbbb,
     ccccc,
     dddddddddd,
     eeeeeeeeeeeeeee
     fffffffffffffff);
     xxxxxxxxxxxxxxx, 
     rrrrrrrrrrrrrrr,
     };
 blabbal

我正在使用

读取文件
  File.open("example.txt", "r").each_line do |line|

那么我想要: 1)当我发现字符串“info”在while循环中迭代下一行,直到我找到字符“);”

这是我当前代码的示例:

        File.open("example.txt", "r").each_line do |line|
            if (line.include?("info") == true)
                while(1) do
                    puts line
                    next if line.include?(")") == false
                end
            end
        end

它似乎没有转到下一行(“puts”总是打印同一行->“info {”)

【问题讨论】:

    标签: ruby string file parsing


    【解决方案1】:
    flag = false
    File.new("example.txt").each_line do |line|
      flag = true if line.include?("info")
      puts line if flag
      flag = false if line.include?(")")
    end
    

    结果:

     info {
         (bbbbb,
         ccccc,
         dddddddddd,
         eeeeeeeeeeeeeee
         fffffffffffffff);
    

    【讨论】:

      【解决方案2】:
      while(1) do
         puts line
         next if line.include?(")") == true
      end
      

      只会无限循环。 next 这里绑定到 while(1) 循环的上下文,所以当然你永远不会到达下一行输入。

      您需要将文件的行读入某种存储,然后处理该存储。

      【讨论】:

        【解决方案3】:
        File.open("temp", "r") do |fh|
              while(line = fh.gets) != nil
                if line.include?("info")
                  while(line = fh.gets) != nil
                    puts "#{line}"
                    break if line.include?(")")
                  end
                end
              end
            end
        

        我认为这就是你所需要的。它的输出是

        (bbbbb,
         ccccc,
         dddddddddd,
         eeeeeeeeeeeeeee
         fffffffffffffff);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-30
          • 2010-12-02
          • 2015-07-04
          • 2017-08-11
          • 2010-11-27
          • 2015-12-02
          • 2017-01-20
          相关资源
          最近更新 更多