2

我正在尝试从包含大约 200 个文本文件的目录中读取文件行,但是,我无法让 Ruby 逐行读取它们。我以前做过,使用一个文本文件,而不是从目录中读取它们。

我可以将文件名作为字符串获取,但我很难打开它们并读取每一行。

以下是我尝试过的一些方法。

方法一:

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 

方法二:

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

end#tryread

方法三:

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

感谢所有回复,我做了一些试验和错误并让它工作。这是我使用的语法

    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

@the Tin Man -> 你需要避免处理“。” 和“..”列出Dir.foreach并给出权限被拒绝错误。一个简单的if应该解决你所有的方法。

Dir.foreach(ARGV[0]) do |f|
  if f != "." and f != ".."
    # code to process file
    # example
    # File.open(ARGV[0] + "\\" + f) do |file|
    # end
  end
end
于 2014-07-24T05:41:31.143 回答
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 回答
0

sudo ruby reader.rb或者你的文件名是什么。

由于权限是基于进程的,如果进程读取没有权限,则您无法读取具有提升权限的文件。

唯一的解决方案是运行具有更多权限的脚本,或者调用另一个已经在运行且具有更高权限的进程来为您读取。

于 2013-02-13T15:52:48.797 回答