我正在尝试从包含大约200个文本文件的目录中读取文件行,但是,我不能让Ruby逐行读取它们。我之前使用过一个文本文件,而不是从目录中读取它们。
我可以将文件名作为字符串,但我正在努力打开它们并阅读每一行。
以下是我尝试过的一些方法。
方法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)
答案 0 :(得分:0)
sudo ruby reader.rb
或您的文件名是什么。
由于权限是基于进程的,因此如果进程读取没有权限,则无法读取具有提升权限的文件。
只有解决方案要么以更多权限运行脚本,要么调用另一个已经运行且具有更高权限的进程为您阅读。
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分:0)
@the Tin Man - &gt;你需要避免处理“。”和{..}列在Dir.foreach
中并给出权限被拒绝错误。一个简单的if
应该可以修复所有的apporo。
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