मेरे पास एक निर्देशिका है जिसमें 200 फाइलें (.txt) हैं और मैं फ़ाइल नाम के एक निश्चित भाग पर एक नियमित अभिव्यक्ति का उपयोग करके उन्हें सॉर्ट करना चाहता हूं।
उदाहरण फ़ाइल नाम हैं:
W:/name/2014-09-02 - name/20140902-070343_1-P4.txt
W:/name/2014-09-02 - name/20140902-070343_10-P4.txt
W:/name/2014-09-02 - name/20140902-070343_2-P4.txt
W:/name/2014-09-02 - name/20140902-070343_200-P4.txt
जो सरणी में एक ही प्रारूप में हैं।
नीचे दिया गया कोड फ़ाइल नामों को सरणी में संग्रहीत करेगा। मैं फिर एक नियमित अभिव्यक्ति का उपयोग कर सॉर्ट करना चाहता हूं _1
, _200
, _10
_2
फ़ाइल नाम का हिस्सा।
require "FileUtils"
contents = Dir.glob("W:/name/2014-09-02 - name/*.txt").select { |f| f.include?("P4")}.sort_by! {|s| s[/(Dd+)-P4.txt/]}
puts contents
उपर्युक्त कोड के साथ मुझे मिल रहा है:
_1
_10
_100
_101
_102
.
.
.
_11
_111
जब मैं चाहता हूं कि यह है:
_1
_2
_3
_4
_5
.
.
.
_10
_11
आखिरकार, बीमार तब सरणी के माध्यम से लूप करना चाहता है ताकि वृद्धिशील मूल्य निरंतर (1 - 200) हो।
उत्तर:
जवाब के लिए 2 № 1[
"W:/name/2014-09-02 - name/20140902-070343_1-P4.txt",
"W:/name/2014-09-02 - name/20140902-070343_10-P4.txt",
"W:/name/2014-09-02 - name/20140902-070343_2-P4.txt",
"W:/name/2014-09-02 - name/20140902-070343_200-P4.txt",
]
.sort_by{|s| s[/(?<=_)d+/].to_i}
परिणाम
[
"W:/name/2014-09-02 - name/20140902-070343_1-P4.txt",
"W:/name/2014-09-02 - name/20140902-070343_2-P4.txt",
"W:/name/2014-09-02 - name/20140902-070343_10-P4.txt",
"W:/name/2014-09-02 - name/20140902-070343_200-P4.txt"
]