2

以下は、ディレクトリを読み取り、ファイルエントリごとにファイルの最初の行を出力するコードです。問題は 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
4

2 に答える 2

2

に可視性の問題はありませんxFile::joinまたはを使用Pathname#+して、ファイル パスを作成する必要があります。非ファイルは考慮から除外する必要があります。で最初の行ではなく、2 行目を選択しています[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 }
于 2013-04-11T23:18:13.733 に答える
2

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

Ruby でパスを安全に結合するには、File.joinを使用する必要があります。File.file?を使用してファイルを開いていることも確認しました。方法。

于 2013-04-11T22:37:53.793 に答える