ruby net-sftp逐行读取文件

时间:2014-03-07 17:00:25

标签: ruby-on-rails ruby sftp 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文件的第一行。我需要逐行读取这个文件,最好忽略标题。

如何逐行读取文件,而不在本地下载文件?

3 个答案:

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