【发布时间】:2014-07-26 16:51:56
【问题描述】:
我有以下代码:
require 'date'
f = File.open(filepath)
f.each_with_index do |line, i|
a, b = line.split("\t")
d = DateTime.strptime(a, '%m/%d/%Y %I:%M %p')
puts "#{a} --- #{b}"
break unless i < 100
end
我收到以下错误:
c_reader.rb:10:in `strptime': invalid date (ArgumentError)
from c_reader.rb:10:in `block in <main>'
from c_reader.rb:6:in `each'
from c_reader.rb:6:in `each_with_index'
from c_reader.rb:6:in `<main>'
文件内容:
2014 年 1 月 30 日凌晨 1:00 1251.6 2014 年 1 月 30 日凌晨 2:00 1248 2014 年 1 月 30 日凌晨 3:00 1246.32 2014 年 1 月 30 日凌晨 4:00 1242.96 2014 年 1 月 30 日上午 5:00 1282.08 2014 年 1 月 30 日上午 6:00 1293.84 2014 年 1 月 30 日上午 7:00 1307.04 2014 年 1 月 30 日上午 8:00 1337.76 2014 年 1 月 30 日上午 9:00 1357.92如果我在 IRB 中输入它,它会完美运行:
DateTime.strptime("1/30/2014 2:00 PM", '%m/%d/%Y %I:%M %p')
谁能告诉我这里发生了什么?
【问题讨论】:
-
仔细检查您的
split -
拆分工作正常,我通过删除
DateTime行来测试代码。 -
我们在您的输入文件中找不到任何选项卡,必须假定它们位于“AM”|“PM”指示符之后。
-
是的,他们是……我没有把它放在样本上,只是想显示内容,但你是对的,标签在 AM|PM 之后
-
您需要为问题提供工作数据。不要故意以使您的代码示例失败的方式更改输入。我们期望有一个输入和代码的工作示例来演示/复制您所看到的问题。照原样,即使我用制表符替换有问题的空格,我也无法复制问题。
标签: ruby file byte-order-mark endianness