4

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

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

4

3 回答 3

4

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

data = sftp.download!("/path/to/remote/file.csv").split(/\r\n/)

data.each do |line|
  puts line
end
于 2014-03-07T19:20:35.227 回答
3

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

文档可以在这里找到

于 2014-08-31T10:32:16.880 回答
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 的每一行拆分为不同的数组列,并删除任何多余的“”。请注意,这适用于换行符为 \n 的 mac。

于 2015-10-08T22:55:02.277 回答