当字符r存在时,读取文件会导致问题

时间:2017-02-20 01:28:58

标签: ruby

我有一个读取输入测试文件的函数,以便我可以进行进一步处理。出于某种原因,它将我的r视为回车\r

def main
    #format input
    input = []
    File.foreach(ARGV[0], 'r') do |f|

        puts "f is #{f}"
        break
    end
end
main()

testfile.csv

149
u,6,3
b,11,11
r,10,11
h,4,8
t,4,5
v,7,9

但是,无论何时在我的测试文件中遇到r,都不会读入其他输出。由于某种原因,r被视为回车\r

命令行

> ruby bst.rb testfile.csv 
f is 149
u,6,3
b,11,11
r

3 个答案:

答案 0 :(得分:2)

查看http://agora.encreation.com/wp-content/uploads/portfolio-immobiliere-pujol-thumb.jpg的文档。第二个参数是用于拆分行的分隔符,文件的打开模式(它也可以是限制 - 要返回的最大长度字符串)。

这意味着在您对SelectedItems的调用中,您要求Ruby从由ListBox字符分隔的文件中返回字符串,这正是您所看到的。

解决方案是删除foreach,只读模式是默认模式,因此您不需要它:

r

答案 1 :(得分:1)

请尝试以下方式

File.foreach("C:/Users/rajarshi.das/Desktop/abc.csv","rb") do |f| 
  puts "f is #{f}"
  break
end

输出

   >> f is 149
    u,6,3
    b,11,11
    r,10,11
    h,4,8
    t,4,5
    v,7,9

替换r模式以使用rb模式或r+模式

File.foreach("C:/Users/rajarshi.das/Desktop/abc.csv","rb")

File.foreach("C:/Users/rajarshi.das/Desktop/abc.csv","r+")

答案 2 :(得分:0)

我不知道为什么File.foreach在回车上分裂,也不知道为什么在那里找到一个。{1}}。但从功能上讲,你所做的只是阅读文件的文本,为此有其他选择:

puts File.read("test.csv")
# or
File.open("test.csv", "r") { |f| puts f.read }