我在一个文件夹中只有两个文件。
" seed.rb",其中包含种子数据:
Jones,James
Williams,Violet
Walton,Briggs
" code.rb",其中包含代码:
require_relative 'seed'
class TransferInformation
def read_seed_data_from_file(filename)
File.readlines(filename).each do |line|
puts line
end
end
end
read_seed_data_from_file(seed)
在控制台中,我运行了ruby code.rb
。
我现在得到的错误是" seed.rb"中第3行意外的输入结束。
答案 0 :(得分:2)
“seed.rb”不是Ruby文件。不要require
(或require_relative
)非Ruby文件。只需删除require_relative
即可。
我还建议将“seed.rb”重命名为不那么具有欺骗性的东西,例如“seed.csv”(comma-separated values file的常用扩展名)。
答案 1 :(得分:2)
首先,请理解CSV文件有一个标准。尝试编写自己的代码来读取和写入代码的人经常会忽略它,但标准仍然存在。而且,通过使用预先构建的轮子,如Ruby附带的the CSV class,您生成正确的CSV数据的几率就会上升,就像您阅读它的几率一样。
该文档的示例显示了如何从文件和字符串读取和写入CSV数据,因此这是起点。从文件中逐行读取行看起来像:
CSV.foreach("path/to/file.csv") do |row|
# use row here...
end
所以要阅读你的数据:
require 'csv'
CSV.foreach("test.csv") do |row|
puts row.reverse.join(' ')
end
运行输出:
James Jones
Violet Williams
Briggs Walton
您希望在大多数情况下逐行读取CSV,因为您只关注一行。数据库转储通常采用CSV格式,并且同时尝试read
大型数据库的整个转储文件(“啜泣”)可能会导致程序失效。
现在,有关您的代码的一些评论:
TransferInformation
不是一个好名字。类应该是一个东西,如“IncomingData”,“Data”或“UserNames”或“Names”。方法是动作或动词。 你不能说
read_seed_data_from_file(seed)
因为该方法是TransferInformation类的一部分。您需要创建该类的实例,然后您可以调用方法:
ta = TransferInformation.new
ta.read_seed_data_from_file('test.csv')
看起来很对,但尚未经过测试。