फाइलों के साथ काम करने के लिए फंक्शन File मॉड्यूल देता है।
किसी पूरी फाइल को पढ़ने के लिए File.read/1 का उपयोग कीजिए। फाइल में लिखने के लिए File.write/2 का उपयोग कीजिए।
जब भी File.write/2 से किसी फाइल में लिखा जाता है, तब एक फाइल डिस्क्रिप्टर खोला जाता है और एक नया Elixir प्रोसेस बनाया जाता है। इस कारण लूप के अंदर File.write/2 से फाइल में लिखने से बचना चाहिए।
इसके बजाय आप फाइल को File.open/2 से खोल सकते हैं। File.open/2 का दूसरा आर्गुमेंट मोड का ऐरे होता है, जिससे आप तय कर सकते हैं कि फाइल को पढ़ने के लिए खोलना है या लिखने के लिए।
File.open/2 उस प्रोसेस का PID लौटाता है जो फाइल को संभालता है। फाइल को पढ़ने और उसमें लिखने के लिए IO मॉड्यूल के फंक्शन इस्तेमाल कीजिए और इस PID को IO डिवाइस के रूप में पास कीजिए।
जब आप फाइल पर काम पूरा कर लें, तो उसे File.close/1 से बंद कीजिए।
File मॉड्यूल के ऊपर बताए गए सभी फंक्शन का एक ! वेरिएंट भी होता है, जो एरर टपल लौटाने के बजाय एरर उठाता है (जैसे File.read!/1)। अगर आप फाइल का न मिलना या अनुमतियों का अभाव जैसी एरर संभालने का इरादा नहीं रखते, तो यही वेरिएंट इस्तेमाल कीजिए।
आप मॉडल ट्रेनों के बहुत बड़े प्रशंसक हैं और अपना यह प्यार दुनिया के साथ बाँटने के लिए एक न्यूज़लेटर शुरू करने का फैसला किया है। शुरुआत में आप अपने न्यूज़लेटर का पहला अंक उन दोस्तों और परिचितों को भेजेंगे जो आपका यह प्यार साझा करते हैं। आपके पास उनके ईमेल पतों वाली एक टेक्स्ट फाइल है।
Newsletter.read_emails/1 फंक्शन बनाइए। इसे एक फाइल पाथ लेना चाहिए। यह फाइल एक टेक्स्ट फाइल है जिसमें ईमेल पते नई लाइनों से अलग किए गए हैं। इसे फाइल में दिए गए ईमेल पतों का ऐरे लौटाना चाहिए।
Newsletter.read_emails("/home/my_user/documents/model_train_friends_emails.txt")
# => ["rick@example.com", "choochoo42@example.com", "anna@example.com"]
ईमेल भेजना एक ऐसा काम है जो कई ऐसी वजहों से फेल हो सकता है जिनका पहले से अनुमान नहीं लगाया जा सकता, जैसे ईमेल पते में कोई टाइपो या नेटवर्क की अस्थायी समस्या। अगर आप किसी को एक ही ईमेल दो बार भेजे बिना अपने सभी दोस्तों को ईमेल दोबारा भेजना चाहते हैं, तो आपको उन ईमेल पतों को लॉग करना होगा जिन्हें यह ईमेल पहले ही मिल चुका है। इसके लिए आपको एक लॉग फाइल की ज़रूरत होगी।
Newsletter.open_log/1 फंक्शन बनाइए। इसे एक फाइल पाथ लेना चाहिए। यह फाइल को लिखने के लिए खोलता है और फाइल को संभालने वाली प्रोसेस का PID लौटाता है।
Newsletter.open_log("/home/my_user/documents/newsletter_issue1_log.txt")
# => #PID<0.145.0>
Newsletter.log_sent_email/2 फंक्शन बनाइए। इसे फाइल को संभालने वाली प्रोसेस का PID और ईमेल पता वाली एक स्ट्रिंग लेना चाहिए। यह फाइल में ईमेल पता लिखता है, और उसके बाद एक नई लाइन।
Newsletter.log_sent_email(pid, "joe@example.com")
# => :ok
Newsletter.close_log/1 फंक्शन बनाइए। इसे फाइल को संभालने वाली प्रोसेस का PID लेना चाहिए और फाइल बंद करनी चाहिए।
Newsletter.close_log(pid)
# => :ok
अब जबकि ईमेल भेजने की प्रक्रिया के सारे ज़रूरी हिस्से आपके पास हैं, आपको इन सबको एक ही फंक्शन में मिलाना है।
Newsletter.send_newsletter/3 फंक्शन बनाइए। इसे ईमेल पतों वाली फाइल का पाथ, एक लॉग फाइल का पाथ, और एक अनाम फंक्शन लेना चाहिए जो किसी दिए गए ईमेल पते पर ईमेल भेजता है। इसे दी गई फाइल से सारे ईमेल पते पढ़कर उनमें से हर एक को ईमेल भेजने की कोशिश करनी चाहिए। अगर ईमेल भेजने वाला अनाम फंक्शन :ok लौटाता है, तो लॉग फाइल में ईमेल पता लिखिए, और उसके बाद एक नई लाइन। ध्यान रखिए कि यह काम ईमेल भेजे जाने के तुरंत बाद हो जाना चाहिए। सारे ईमेल भेजने के बाद लॉग फाइल बंद कर दीजिए।
Newsletter.send_newsletter(
"model_train_friends_emails.txt",
"newsletter_issue1_log.txt",
fn email -> :ok end
)
# => :ok
Exercism पर साइन अप कीजिए और Elixir को 58 कॉन्सेप्ट168 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।