我正在尝试读取文件名并处理每一行。如何将文件名传递给函数?
puts "file name?? "
_file = get.chomps
def printFile(_file)
do |f|
f.each_line do |line|
print_me = "Line 1 " + line
return print_me
end
end
end
我计划将print_me
传递给另一个函数,例如:
def thisWillPrint(print_me)
new_print = print_me + " DONE! "
end
答案 0 :(得分:1)
我可以在您的代码中看到一些问题。首先,你在printFile函数的定义中使用了一个块,这是一个语法错误,接下来你使用了那个从未给出值的块中的变量f,除此之外你尝试对它进行循环并且从不打开文件描述符。最后,你必须在某处调用printFile函数,以便ruby知道它必须运行它。
你的printFile函数应该做的第一件事是获取file descriptor到用户在_file变量中作为字符串给你的文件,这样你实际上有一个流,你可以读取不仅仅是字符串的行宾语。因此,我建议您将变量从_file更改为fileName,并保留流的文件。您可以使用Ruby自己的File类并调用其open方法来完成此操作。正如您从文档中看到的那样,可以通过几种不同的方式调用open,但是让我们使用像您尝试的那样的块。
puts 'give me a path to a file'
fileName = gets.chomp
def printFile(fileName)
counter = 0
File.open(fileName) do |file|
while line = file.gets
print_me = "line " + counter.to_s + " "+line
thisWillPrint(print_me)
end
end
end
def thisWillPrint(print_me)
puts print_me + " DONE! "
end
printFile(fileName)
你还必须在最后调用printFile函数,以便ruby实际运行。
答案 1 :(得分:0)
请注意,通过返回循环内部,您也将退出它。通过以下内容,您将获得该文件的内容。
def printfile(filename)
print_me = ""
File.open(filename, "r") do |f|
f.each {|line| print_me << line }
end
print_me
end
对于大文件,返回变量也会非常大。
答案 2 :(得分:0)
要从标准输入读取一行,您可以使用gets
方法。 gets
方法默认捕获换行符\n
。您必须使用chomp
方法来删除换行符。
因此,要从标准输入中获取文件名,您可以执行以下操作:
print "File's name? "
_file = gets.chomp
在printFile
方法中,您可以执行以下操作:
def printFile(_file)
print_me = ""
File.foreach(_file) do |line|
# process each line however you'd like inside this block
# for example:
print_me += line
end
return print_me # explicit return not required
end
请注意,如果它是方法中的最后一个表达式,则不必明确“返回”某些内容。最后一个表达式可能只是print_me
。
您可以将此方法返回的内容传递给thisWillPrint
之类的其他方法,如下所示:
def thisWillPrint(print_me)
new_print = print_me + "Done!"
end
output = printFile(_file)
thisWillPrint(output)