क्या "4h 30m" "1d 4h" जैसे तारों को पार्स करने के लिए कोई मणि या कुछ है - जिरा या कार्य योजनाकारों के अनुमानों की तरह, अंतर्राष्ट्रीयकरण के साथ?रूबी में दिन/घंटे/मिनट/सेकेंड का विश्लेषण कैसे करें?
उत्तर
करता है पोस्ट कर रहा है एक 2 जवाब लिखा, पुरानी (जो अपने मूल जवाब सुझाव) आप timespans लेकिन टाइम स्टांप नहीं देता है के रूप में।
यहां एक पार्सर पर जाना है।
class TimeParser
TOKENS = {
"m" => (60),
"h" => (60 * 60),
"d" => (60 * 60 * 24)
}
attr_reader :time
def initialize(input)
@input = input
@time = 0
parse
end
def parse
@input.scan(/(\d+)(\w)/).each do |amount, measure|
@time += amount.to_i * TOKENS[measure]
end
end
end
रणनीति काफी सरल है। "5h"
["5", "h"]
में विभाजित करें, परिभाषित करें कि "h"
कितने सेकंड (TOKENS
) का प्रतिनिधित्व करता है, और उस राशि को @time
पर जोड़ें।
TimeParser.new("1m").time
# => 60
TimeParser.new("1m wtf lol").time
# => 60
TimeParser.new("4h 30m").time
# => 16200
TimeParser.new("1d 4h").time
# => 100800
यह बहुत मुश्किल नहीं होना चाहिए यह या तो "1.5h"
संभाल रही है, codebase देखकर यह है के रूप में सरल है।
हालांकि इसमें क्या पार्स?
यह एक हैश में पार्स जाएगा:
"4h 30m".split(/\s/).each{|i| h[i.gsub(/\d+/,"")] = i.gsub(/\w/,"")}
क्षमा करें। जिरा से परिचित नहीं ....
आप chronic का उपयोग कर सकते हैं। यह "कल", "पिछले सप्ताह" इत्यादि सहित बहुत अधिक सब कुछ पार्स कर सकता है।
अद्यतन: ओपी टिप्पणी में बताता है, क्रॉनिक तिथियों के लिए है, समय-समय पर नहीं। मेरा दूसरा जवाब देखें।
मैं इस पद्धति है कि यह बहुत अच्छी तरह से
def parse_duration(dur)
duration = 0
number_tokens = dur.gsub(/[a-z]/i,"").split
times = dur.gsub(/[\.0-9]/,"").split
if number_tokens.size != times.size
raise "unrecognised duration!"
else
dur_tokens = number_tokens.zip(times)
for d in dur_tokens
number_part = d[0].to_f
time_part = d[1]
case time_part.downcase
when "h","hour","hours"
duration += number_part.hours
when "m","minute","minutes","min","mins"
duration += number_part.minutes
when "d","day","days"
duration += number_part.days
when "w","week","weeks"
duration += number_part.weeks
when "month", "months"
duration += number_part.months
when "y", "year", "years"
duration += number_part.years
else
raise "unrecognised duration!"
end
end
end
duration
end
chronic_duration
ऐसा करता है।
- 1. रूबी के साथ शब्द दस्तावेज़ों का विश्लेषण कैसे करें?
- 2. मिलीसेकंड का विश्लेषण कैसे करें?
- 3. BaseHTTPRequestHandler.path का विश्लेषण कैसे करें
- 4. जीडब्ल्यूटी में तिथियों का विश्लेषण कैसे करें?
- 5. ब्राउज़र में YAML का विश्लेषण कैसे करें?
- 6. जावा में डब्लूएसडीएल का विश्लेषण कैसे करें?
- 7. फोनगैप में xmlwebservice का विश्लेषण कैसे करें
- 8. कोड (पाइथन में) का विश्लेषण कैसे करें?
- 9. रैगेल में टेम्पलेट भाषाओं का विश्लेषण कैसे करें?
- 10. रूबी में टेक्स्ट की एक अलग-अलग पंक्ति का विश्लेषण कैसे करें?
- 11. .net - कैसे विश्लेषण करें
- 12. जावा थ्रेड डंप का विश्लेषण कैसे करें?
- 13. Dalvik जीसी व्यवहार का विश्लेषण कैसे करें?
- 14. एक साधारण व्याकरण का विश्लेषण कैसे करें?
- 15. संख्यात्मक विश्लेषण दिनचर्या का परीक्षण कैसे करें?
- 16. रिश्तेदार समय का विश्लेषण कैसे करें?
- 17. एमआईसीआर लाइन डेटा का विश्लेषण कैसे करें?
- 18. सरल अंग्रेजी वाक्यों का विश्लेषण कैसे करें
- 19. कोर डंप का विश्लेषण कैसे करें
- 20. रेल ऐप का विश्लेषण करें
- 21. उद्देश्य सी में आईएसओ -8601 अवधि का विश्लेषण कैसे करें?
- 22. जावा में HTTP अनुरोध का विश्लेषण कैसे करें?
- 23. सी: एंड्रॉइड में एक्सएमएल का विश्लेषण कैसे करें?
- 24. पायथन में पुनर्गठित टेक्स्ट का विश्लेषण कैसे करें?
- 25. आईफोन में जेसन मूल्य का विश्लेषण कैसे करें?
- 26. जावा में बुरी तरह गठित एक्सएमएल का विश्लेषण कैसे करें?
- 27. जावास्क्रिप्ट में एक्सेल फ़ाइल का विश्लेषण कैसे करें?
- 28. एंड्रॉइड में जेसन स्ट्रिंग का विश्लेषण कैसे करें?
- 29. जावास्क्रिप्ट में एक स्ट्रिंग का विश्लेषण कैसे करें?
- 30. बैश में एक CSV फ़ाइल का विश्लेषण कैसे करें?
[क्रोनिक अवधि] (https://github.com/hpoydar/chronic_duration) यह करता है लेकिन यह अधिक बहुमुखी और अच्छी तरह से परीक्षण किया जाता है। – sj26