【问题标题】:In Ruby- Parsing Directory and reading first row of the file在 Ruby-解析目录并读取文件的第一行
【发布时间】:2013-04-11 22:29:05
【问题描述】:

下面是应该读取目录的一段代码,并为每个文件条目打印文件的第一行。问题是 x 不可见,因此文件未被解析。

Dir.foreach("C:/fileload/src") do |file_name|
  x = file_name
  puts x
  f = File.open("C:/fileload/src/" +x)
  f.readlines[1..1].each do |line| 
    puts line 
  end
end

【问题讨论】:

    标签: ruby fileparsing


    【解决方案1】:

    为什么要将x 分配给file_name?您可以直接使用file_name。如果你只读取文件的第一行,为什么不试试这个呢?

    #!/usr/bin/ruby
    
    dir = "C:/fileload/src"
    Dir.foreach(dir) do |file_name|
        full = File.join(dir, file_name)
        if File.file?(full)
            f = File.open(full)
            puts f.first
            f.close
        end
    end
    

    您应该使用File.join 在Ruby 中安全地组合路径。我还检查了您是否正在使用File.file? 方法打开文件。

    【讨论】:

    • 谢谢。感谢您的回答。这正是我想要完成的。感谢您对 f.first 和 File.join 的深入了解
    • @nprs 很高兴我能帮上忙。干杯。
    【解决方案2】:

    x 没有可见性问题。您应该使用File::joinPathname#+ 来构建您的文件路径。您应该将非文件排除在考虑之外。您正在选择第二行,而不是使用[1..1] 的第一行。这是您的示例代码的更清晰正确的替换。

    dir = "C:/fileload/src"
    Dir.foreach(dir).
    map    { |fn| File.join(dir,fn) }.
    select { |fn| File.file?(fn) }.
    each   { |fn| puts File.readlines(fn).first }
    

    【讨论】:

    • 这是一个相当有趣的方法,让我思考了一段时间。
    • @squiguy 这个想法不是让你思考,而是直截了当地说出你想要的。一旦你习惯于以更实用的风格思考/阅读,这就像一个食谱:1)生成目录列表,2)将名称映射到路径,3)选择那些是文件,4)打印第一行每个文件。
    • 我不反对功能风格,我只是欣赏它:)。
    • 感谢您的帮助和解释代码。如您所见,我是 ruby​​ 的新手。再次感谢!
    猜你喜欢
    • 2023-02-09
    • 2010-12-02
    • 2023-04-02
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多