通过将filename传递给函数来读取文件

时间:2015-10-13 00:07:57

标签: ruby function printing

我正在尝试读取文件名并处理每一行。如何将文件名传递给函数?

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

3 个答案:

答案 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)