मैं आंशिक पथ और निर्देशिका नामों को जोड़कर एलिसप में मैन्युअल रूप से पथ तारों का निर्माण कर रहा हूं। दुर्भाग्यवश कभी-कभी पथ स्लैश के साथ समाप्त होते हैं, कभी-कभी नहीं। इसलिए, मुझे आवश्यक होने पर निर्देशिका नाम को संयोजित करने से पहले स्लैश डालने की आवश्यकता है लेकिन अन्यथा नहीं। ऐसा करने का एक अच्छा तरीका क्या है?एलिसप में, स्लैश के साथ पथ स्ट्रिंग को सही ढंग से डालने के तरीके कैसे प्राप्त करें?
उत्तर
(file-name-as-directory dir)
एक पिछला स्लैश के साथ निर्देशिका पथ dir
वापस करेगा, यदि आवश्यक हो तो एक जोड़ना, और अन्यथा नहीं।
(let ((directory-list '("/foo" "bar/" "p/q/" "x/y"))
(file-name "some_file.el"))
(concat
(mapconcat 'file-name-as-directory directory-list "")
file-name))
"/foo/bar/p/q/x/y/some_file.el"
या एक विकल्प के रूप में, यदि आप सूची में फ़ाइल नाम शामिल करना चाहता था, आप directory-file-name
उपयोग कर सकता है:
आप एक सूची में आंशिक रास्तों में से अपने अनुक्रम था, तो आप की तरह कुछ कर सकता है जो करता है file-name-as-directory
के विपरीत:
(let ((path-list '("/foo" "bar/" "p/q/" "x/y/some_file.el")))
(mapconcat 'directory-file-name path-list "/"))
"/foo/bar/p/q/x/y/some_file.el"
(? किसी ने मुझे सही करें अगर एक गैर-निर्देशिका पर directory-file-name
का उपयोग कर पोर्टेबल नहीं है)
क्या होगा यदि इसमें '/' उदा। '"/P/q/"'? – qazwsx
यदि यह शुरुआत में है, तो कोई समस्या नहीं है (ऊपर मेरे उदाहरण के अनुसार)। यदि यह शुरुआत में नहीं है, तो पथ पथ के अनुक्रम के बीच में एक पूर्ण पथ का कोई व्यवसाय नहीं है, जिससे कि उस अनुक्रम को उत्पन्न करने वाले तर्क में एक बग का सुझाव दिया जा सके। – phils
क्या यह एक पोर्टेबिलिटी समस्या नहीं है जिसे आप स्पष्ट रूप से पारिस्थितिक उदाहरण में "/" का उपयोग कर रहे हैं? –
इस तरह कुछ एक प्रारंभिक बिंदु के रूप में, आदि काम करना चाहिए, हालांकि आप इसे मंच स्वतंत्र बनाने के लिए एक सा बाहर मांस के लिए चाहते हैं
(defun append-path-component (path new-part)
(if (string-match ".*/$" path)
(concat path new-part)
(concat path "/" new-part)))
सामान्य के अनुसार, वहाँ शायद elisp के कुछ सा जो पहले से ही ऐसा करता है कि मुझे अभी पता नहीं है।
धन्यवाद।इसके अलावा, मैं उन संभावित रूप से मौजूदा अंतर्निहित और फीचरफुल फ़ंक्शन की तलाश में था। – qazwsx
यह एक पोर्टेबिलिटी विफल है। आपको अपने लिस्प कोड में कभी भी पथ अलग नहीं करना चाहिए। –
event_jr: 'directory-sep-char' लंबे अप्रचलित है, और इसे पूरी तरह से Emacs 24 में हटा दिया गया है। पुराने डॉकस्ट्रिंग ने कहा" मान हमेशा होता है "/'। इस चर का उपयोग न करें, बस '/ 'का उपयोग करें। " – phils
(defun* tofilename (directorylist &optional (filename nil))
"concatenate directory names into a path, with an optional file name as last part"
(concat
(mapconcat 'directory-file-name directorylist "/")
"/"
filename))
(tofilename '("~/" "Temp/") "temp.txt")
;; => "~/Temp/temp.txt"
(tofilename '("~/" "Temp/"))
;; => "~/Temp/"
(tofilename '("~/" "Temp/" "test"))
;; => "~/Temp/temp/"
संदिग्ध सामग्री के कुछ हिस्सों से फ़ाइल नाम इकट्ठा करने का सबसे आसान तरीका विस्तार-फ़ाइल-नाम के साथ है। उदाहरण के लिए:
(expand-file-name "foo.txt")
इस आम रूप आप एक पूर्ण फ़ाइल नाम डिफ़ॉल्ट-निर्देशिका के आधार पर दे देंगे:
/home/me/foo.txt
लेकिन आप एक चर 'निर्देशिका' जिनकी सामग्री "/ घर/उन्हें है अगर/subdir "और उस का उपयोग करना चाहते हैं, तो ऐसा:
(expand-file-name "foo.txt" dir)
यह फर्क नहीं पड़ता अगर dir में समाप्त होता है/या नहीं। यदि आप किसी अन्य प्लेटफ़ॉर्म पर हैं, और इसमें अन्य स्लैश हैं, तो यह भी सही काम करेगा। क्या आपके पास मिश्रण है? बस उन्हें ढेर:
(expand-file-name "foo.txt" (expand-file-name "somesubdir" dir))
जब तक आप वास्तव में रिश्तेदार के रूप में रिश्तेदार फ़ाइल नाम रखने के बारे में परवाह है, तो यह हमेशा काफी बेहतर concat
से बचने और बजाय expand-file-name
उपयोग करने के लिए है।
क्या आप दोनों के अंतर को दर्शाने के लिए एक उदाहरण दिया जा सकता है? – qazwsx
यदि आप फ़ाइल मैनिपुलेशन के साथ सौदा करते हैं, फ़ाइलपैथ में शामिल होने और विभाजित करते हैं, खाली निर्देशिकाओं की जांच करते हैं और ऐसे में, मैं दृढ़ता से f.el
, आधुनिक फ़ाइल मैनिपुलेशन लाइब्रेरी स्थापित करने की सलाह देता हूं। आपके पास एक नामस्थान के तहत फ़ाइल और फ़ाइलपैथ मैनिपुलेशन फ़ंक्शंस का एक बड़ा सेट होगा और फिर कभी पहिया को फिर से नहीं चलाएगा।
आपको जिस फ़ंक्शन की आवश्यकता है वह f-join
है, यह पथ के कुछ हिस्सों को जोड़ता है, जहां आवश्यक हो वहां स्लैश जोड़ता है।
- 1. os.path.join सही ढंग से स्वरूपण पथ
- 2. एक जेसन स्ट्रिंग को सही तरीके से कैसे घोषित करें?
- 3. उप आदेशित सूचियों को सही तरीके से कैसे प्राप्त करें
- 4. याहू से एलिसप के साथ स्टॉक की कीमतें प्राप्त करना?
- 5. क्लिपबोर्ड से सही ढंग से एन्कोडेड HTML कैसे प्राप्त करें?
- 6. एक राज्यव्यापी पायथन मॉड्यूल के साथ परीक्षण अलगाव को सही ढंग से कैसे प्राप्त करें?
- 7. रिवर्स के साथ HttpResponseRedirect सही तरीके से कैसे करें?
- 8. पायथन में, मैं फ़ाइल के लिए सही तरीके से कैसा पथ कैसे प्राप्त कर सकता हूं?
- 9. रन पथ, खोज पथ, और नाम स्थापित करने के लिए सही तरीके से सेट कैसे करें?
- 10. xlib के साथ स्क्रीनशॉट को सही तरीके से कैसे लें?
- 11. मैं एक MySQL तालिका में एक यूनिकोड इलिप्सिस को सही ढंग से डालने के लिए SQLAlchemy कैसे प्राप्त करूं?
- 12. जेएसटीएल में तारों को सही तरीके से कैसे विभाजित करें?
- 13. कैसे सही ढंग से
- 14. PHP में पूर्णांक को सही तरीके से कैसे पार्स करें?
- 15. स्ट्रिंग्स से स्लैश के अवसरों की संख्या कैसे प्राप्त करें
- 16. पथ स्लैश जावास्क्रिप्ट
- 17. स्विंग के साथ जावा में एमवीसी को सही ढंग से कैसे कार्यान्वित करें?
- 18. मेनू आइटम को सही तरीके से बाध्य कैसे करें?
- 19. PHP में स्ट्रिंग को सही तरीके से एन्कोड करने के लिए URL कैसे करें?
- 20. मैवेन-वॉर-प्लगइन में मेनिफेस्ट क्लास-पथ को सही तरीके से कैसे सेट करें
- 21. सिस्टम पथ चर के साथ पथ से पूर्ण पथ कैसे प्राप्त करें?
- 22. एक नया स्ट्रिंग मान सही तरीके से कैसे असाइन करें?
- 23. डब्ल्यूपीएफ सी # पथ: कोड में ज्यामिति से पथ डेटा (XAML में नहीं) के साथ स्ट्रिंग से कैसे प्राप्त करें
- 24. कैसे सही ढंग से मेजबान के नाम
- 25. यूआरएल में आखिरी स्लैश के बाद सबकुछ कैसे प्राप्त करें?
- 26. निम्नलिखित तरीके से सही तरीके से कैसे अनुक्रमणित करें?
- 27. जावा में एक स्ट्रिंग से सफेद जगहों को सही ढंग से कैसे ट्रिम करें?
- 28. कैसे साफ़ करें: दोनों; सही ढंग से?
- 29. सही ढंग से छोरों
- 30. NSManagedObjectContext सही ढंग से
लिनक्स पर, फ़ाइल पथ में // प्रतीकों को दोगुना कर दिया जाता है आमतौर पर (हमेशा मुझे लगता है) एक एकल के रूप में व्याख्या किया जाता है, इसलिए अतिरिक्त व्यक्ति को कोई समस्या नहीं होनी चाहिए। – Tyler
इसे सभी प्लेटफ़ॉर्म पर काम करने की आवश्यकता है। – qazwsx