2016-11-16 5 views
5

द्वारा Tstringlist को सॉर्ट करें मेरे पास फाइलों की एक श्रृंखला है जिसमें विभिन्न फ़ाइल पथ और फ़ाइल नाम हैं, सभी फ़ाइल नामों का एक ही एक्सटेंशन है लेकिन निर्देशिका नाम या पथ सभी अलग हैं और फ़ाइलों को लोड करने के बारे में सेट हैं Tstringlist और मैं उन्हें फ़ाइल नाम में क्रमबद्ध करने की कोशिश कर रहा हूं भले ही उनके पास पथ भी हों।डेल्फी XE2 फ़ाइल नाम

यहाँ TStringList में तार का एक उदाहरण है: -

c:\directory 1\AboutUs.lnk 
c:\directory something\AAHelp.lnk 
c:\directory anything\AAATalk.lnk 

जब स्ट्रिंग मैं अंत चाहते हैं के फ़ाइल नाम भाग के अनुसार क्रमबद्ध।

c:\directory anything\AAATalk.lnk 
c:\directory something\AAHelp.lnk 
c:\directory 1\AboutUs.lnk 

दूसरे शब्दों में मैं स्ट्रिंग के फ़ाइल नाम से पथ के साथ स्ट्रिंग को सॉर्ट करने में सक्षम होना चाहता हूं।

किसी भी मदद की सराहना की जाएगी!

उत्तर

6

उपयोग TStringList.CustomSort():

function Compare(List: TStringList; Index1, Index2: Integer): Integer; 
begin 
    Result := CompareStr(
    LowerCase(ExtractFileName(List[Index1])), 
    LowerCase(ExtractFileName(List[Index2])) 
); 
end; 

// Then, just call: 
YourStrList.CustomSort(Compare); 
+1

यह दृष्टिकोण काम करेगा लेकिन यह काफी खराब प्रदर्शन हो सकता था। क्यूं कर? क्योंकि इस दृष्टिकोण में आप प्रत्येक तुलना के लिए 'ExtractFileName' को दो बार कॉल कर रहे हैं। अब कितनी तुलना की जरूरत है काफी हद तक निर्भर है जिस पर सॉर्टिंग एल्गोरिदम का उपयोग किया जाता है। तो मैं किसी भी सॉर्टिंग करने से पहले डेटा (फ़ाइल नाम निकालने) की तैयारी करने की सिफारिश करता हूं। यह प्रक्रिया को काफी तेज़ी से बढ़ा सकता है क्योंकि आपको प्रत्येक सूची आइटम के लिए केवल एक बार 'एक्स्ट्रेक्टफाइलनाम' कॉल करने की आवश्यकता होगी। – SilverWarior

+1

या शायद आपके डेटा को तैयार करने के लिए एक बेहतर तरीका होगा ताकि यह तारों की जोड़ी के रूप में संग्रहीत किया जा सके जहां एक स्ट्रिंग फ़ाइल पथ का प्रतिनिधित्व करती है और दूसरा फ़ाइल नाम का प्रतिनिधित्व करता है। यह आपको तथाकथित 'बहु-पैरामीटर' सॉर्टिंग को लागू करने की अनुमति देगा जहां आप प्रारंभ में फ़ाइल नामों के आधार पर अपना डेटा सॉर्ट करेंगे और जब आपके पास एक ही नाम के साथ कई फाइलें होंगी तो आप उन्हें अपने पथ से आगे क्रमबद्ध करेंगे। – SilverWarior

+0

@ सिल्वरवायर, मैं अनुकूलन के बारे में आपकी बात समझता हूं। आप अपने विचार को लागू करने का उत्तर पोस्ट कर सकते हैं और मुझे स्वीकार्य उत्तर बदलने का सुझाव देने में खुशी होगी। – karliwson

संबंधित मुद्दे