我有一小块ruby,它创建一个包含tsv内容的文件,包含2列,日期和随机数.
#!/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
Run Code Online (Sandbox Code Playgroud)
然后,从另一个程序,我读取此文件并从随机数创建一个文件:
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
Run Code Online (Sandbox Code Playgroud)
但是,当我去检查文件时,我看到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
Run Code Online (Sandbox Code Playgroud)
有什么建议?
parts = line.split("\t")
random = parts.at(1)
Run Code Online (Sandbox Code Playgroud)
line将包含一个尾随的换行符.所以对于一条线
"whatever\t1234\n"
Run Code Online (Sandbox Code Playgroud)
random将包含"1234\n".然后,换行符char成为文件名的一部分,您将其视为问号.最简单的解决方法是进行一些消毒:
random = parts.at(1).chomp
# alternatively use .strip if you want to remove whitespaces
# from beginning of the value too
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |