【问题标题】:Ruby : NoMethodError: undefined method `split' on text fileRuby:NoMethodError:文本文件上未定义的方法“拆分”
【发布时间】:2025-04-16 16:30:02
【问题描述】:

我正在尝试将 txt 文件(逐行)加载到数组中,但遇到 NoMethodError 错误。

input_log = File.open("C:/text_file.txt", "r")
array1 = input_log.split("\n")
array1.each do |element|
  puts element
end

当你运行它时,我得到了

**:in `<top (required)>': undefined method `split' for #<File:C:/text_file.txt> (NoMethodError)
    from -e:1:in `load'
    from -e:1:in `<main>'**

PS:Ruby 初学者 - 请帮助

【问题讨论】:

标签: ruby


【解决方案1】:

File.open 为您提供了一个 IO 对象,您可以从中读取内容。您应该阅读文件数据,然后在这些内容上split

input_log = File.open("C:/text_file.txt", "r").read
array1 = input_log.split("\n")
array1.each do |element|
  puts element
end

对于您的任务,最好使用IO.foreach

File.foreach("C:/text_file.txt") do |line|
  puts line
end

【讨论】:

  • 感谢 Arie,感谢您的帮助...看起来它会读取文件中的每一行并将其放入。
【解决方案2】:

另一种方法,专门用于读取多行文件:

puts IO.readlines("C:/text_file.txt")

函数readlines用于将多行文件读入一个数组,每个条目对应文件中的一行,可以使用puts打印。 您可以按如下方式读取并将每一行放入数组中:

array = IO.readlines("C:/text_file.txt").map{&:chomp)

【讨论】:

  • 我用过 ... array1 = input_log.readlines ... 这会造成任何问题吗?
  • 它没有,但是你在 2 个语句中完成了你在 1 中可以做的事情。即使你将它们结合起来,我的版本也比 File.open("somefile.txt","r").readlines.map(&amp;:chomp) 短,读起来更像英语(readlines从此文件中并从中选择换行符)...
  • cool..didnt 知道您可以将 readlines 和 map 直接组合到 File handler stm 中 .. 感谢伙伴
  • @sqummer:嗯,我希望它有用:)
【解决方案3】:

您不能直接在文件对象上使用 split 方法

所以你可以这样尝试

array1 = []
File.open("C:/text_file.txt", "r").each do |test|
array1 << test.split("\n")
end
array1.each do |element|
  puts element
end

【讨论】: