文件名中的Ruby问号

时间:2015-09-02 13:06:04

标签: ruby file

我有一小段红宝石创建了一个包含tsv内容的文件,包含2列,日期和随机数。

Sub Calculate_Click()
    Dim sum As Integer
    Dim mult As Integer

    Dim input1 As Integer
    Dim input2 As Integer

    input1 = Worksheets("test1_input").Cells(1, 2)
    input2 = Worksheets("test1_input").Cells(2, 2)


    sum = input1 + input2
    mult = input1 * input2

    Worksheets("test1_output").Cells(1, 2) = sum
    Worksheets("test1_output").Cells(2, 2) = mult

End Sub

然后,从另一个程序,我读取此文件并使用随机数创建一个文件:

   #!/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

但是当我去检查文件时,我会看到 dates_file=File.new(DATES_FILE_PATH,"r") dates_file.each_line do |line| parts=line.split("\t") random=parts.at(1) table=File.new("#{TMP_DIR}#{random}.tsv","w") end 。 我最初认为这是tsv文件中的行分隔符(包含日期和随机的那个),但它在同一个unix文件系统中运行,它不是从dos到unix的事务 文件中的一些行:

645?.tsv

有什么建议吗?

1 个答案:

答案 0 :(得分:7)

 parts = line.split("\t")
 random = parts.at(1)

line将包含一个尾随的换行符。所以换行

"whatever\t1234\n"

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

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