文件名中的Ruby问号

文件名中的Ruby问号,ruby,file,Ruby,File,我有一小段ruby,它创建了一个包含tsv内容的文件,包含两列、一个日期和一个随机数 #!/usr/bin/ruby require 'date' require 'set' startDate=Date.new(2014,11,1) endDate=Date.new(2015,9,1) dates=File.new("/PATH_TO_FILE/dates_randoms.tsv","w+") rands=Set.new while startDate <= endDat

我有一小段ruby,它创建了一个包含tsv内容的文件,包含两列、一个日期和一个随机数

   #!/usr/bin/ruby

require 'date'
require 'set'

startDate=Date.new(2014,11,1)
endDate=Date.new(2015,9,1)

dates=File.new("/PATH_TO_FILE/dates_randoms.tsv","w+")

rands=Set.new

while startDate <= endDate do
   random=rand(1000)
   while rands.add?(random).nil? do
     random=rand(1000)
   end
   dates.puts("#{startDate.to_s.gsub("-","")}   #{random}")
   startDate=startDate+1
end
但是当我去检查文件时,我看到了
645?.tsv
。 我最初认为这是tsv文件(包含日期和随机数的文件)中的行分隔符,但它运行在同一个unix文件系统中,而不是从dos到unix的事务 文件中的某些行:

head dates_randoms.tsv
20141101        356
20141102        604
20141103        680
20141104        668
20141105        995
20141106        946
20141107        354
20141108        234
20141109        429
20141110        384
有什么建议吗

 parts = line.split("\t")
 random = parts.at(1)
将包含尾随的换行符。所以,我想说一句话

"whatever\t1234\n"
random
将包含
“1234\n”
。该换行符随后成为文件名的一部分,您将其视为问号。最简单的解决方法是进行一些消毒:

random = parts.at(1).chomp
# alternatively use .strip if you want to remove whitespaces 
# from beginning of the value too

请共享从
/PATH\u到\u文件/dates\u randoms.tsv
的几行代码。顺便说一句,您没有关闭此文件描述符,因此其中可能有任何垃圾。@mudasobwa:这是newline@lurker这是thx注意到的一个错误,在第一个代码段的
put
命令中拾取了随机变量。@mudasobwa在下一段代码中调用了
文件。close
,该段代码没有显示为不相关,而是显示为thx,以表示注意。看起来替换是在文件系统级别进行的。
random = parts.at(1).chomp
# alternatively use .strip if you want to remove whitespaces 
# from beginning of the value too