ruby net-sftp逐行读取文件

我正在使用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文件的第一行。 我需要逐行读取这个文件,最好忽略标题。

如何在不在本地下载文件的情况下逐行读取文件?

我通过这样做解决了这个问题:

 data = sftp.download!("/path/to/remote/file.csv").split(/\r\n/) data.each do |line| puts line end 

对此的正确答案实际上是使用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 

文档可以在这里找到

在我的情况下,这样的工作:

 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。

Interesting Posts