我正在使用ruby 2.0.0和rails 4.0.0。我有类似的东西:
require 'net/sftp'
sftp = Net::SFTP.start('ftp.app.com','username', :password => 'password')
sftp.file.open("/path/to/remote/file.csv", "r") do |f|
puts f.gets
end
这将打开FTP站点上的文件,但它只是puts
csv文件的第一行。我需要逐行读取这个文件,最好忽略标题。
如何逐行读取文件,而不在本地下载文件?
答案 0 :(得分:4)
我这样解决了这个问题:
data = sftp.download!("/path/to/remote/file.csv").split(/\r\n/)
data.each do |line|
puts line
end
答案 1 :(得分:1)
对此的正确答案实际上是使用file.eof?值。
代码如下:
require 'net/sftp'
sftp = Net::SFTP.start('ftp.app.com','username', :password => 'password')
sftp.file.open("/path/to/remote/file.csv", "r") do |f|
while !f.eof?
puts f.gets
end
end
可以找到文档here
答案 2 :(得分:0)
在我的情况下,这样的工作:
data = sftp.download!("/path/to/remote/file.csv").split(/\n/).map{ |e| e.split(/,/).map{ |x| x.gsub(/"/, "")} }
data.each do |line|
puts line
end
还会将.csv的每一行拆分为不同的数组列,并删除多余的""。请注意这是针对mac的换行符是\ n。