2

約 200 個のテキスト ファイルを含むディレクトリからファイル行を読み込もうとしていますが、Ruby で行ごとに読み取ることができません。以前は、ディレクトリから読み取るのではなく、1 つのテキスト ファイルを使用してそれを行いました。

ファイル名を文字列として取得できますが、それらを開いて各行を読み取るのに苦労しています。

ここに私が試したいくつかの方法があります。

方法 1:

def readdirectory
  @filearray = []
Dir.foreach('mydirectory') do |i|
 # puts i.class
    @filearray.push(i)
    @filearray.each do |s|
     # @words =IO.readlines('s')
      puts s
    end#do
 #   puts @words
end#do

end#readdirectory 

方法 2:

def tryread
 Dir.foreach('mydir'){
   |x| IO.readlines(x)
 }

end#tryread

方法 3:

def tryread
 Dir.foreach('mydir') do |s|
   File.readlines(s).each do |line|
               sentence =line.split
   end#inner do

 end #do
end#tryread

ループ関数によって渡された文字列を開こうとするたびに、エラーが発生し続けます。

Permission denied - . (Errno::EACCES)
4

4 に答える 4

0

sudo ruby reader.rbまたはあなたのファイル名が何であれ。

アクセス許可はプロセス ベースであるため、プロセスの読み取りに権限がない場合、昇格されたアクセス許可を持つファイルを読み取ることはできません。

唯一の解決策は、より多くの権限でスクリプトを実行するか、より高い権限で既に実行されている別のプロセスを呼び出して読み取りを行うことです。

于 2013-02-13T15:52:48.797 に答える
0

すべての返信に感謝します。試行錯誤を繰り返して動作するようになりました。使用した構文は次のとおりです。

    Dir.entries('lemmatised').each do |s|
      if !File.directory?(s)

        file = File.open("pathname/#{s}", 'r')

        file.each_line do |line|
          count+=1
          @words<<line.split(/[^a-zA-Z]/)
        end # inner do
            puts @words
      end #if
    end #do
于 2013-02-17T12:04:40.780 に答える
0

これを試して、

#it'll hold the lines
f = []

#here test directory contains all the files,
#write the path as per the your computer,
#mine's as you can see, below

#fetch filenames and keep in sorted order
a = Dir.entries("c:/Users/lordsangram/desktop/test")

#read the files, line by line
Dir.chdir("c:/Users/lordsangram/desktop/test")

#beginning for i = 1, to ignore first two elements of array a,
#which has no associated file names
2.upto(a.length-1) do |i|
    File.readlines("#{a[i]}").each do |line|
        f.push(line)
    end  
end

f.each do |l|
    puts l
end
于 2013-02-17T13:46:30.993 に答える