Hírlevél

Hírlevél

Tanulófeladat

Bevezetés

Fájl

A fájlokkal való munkához szükséges függvényeket a File modul biztosítja.

Egy teljes fájl beolvasásához használd a File.read/1 függvényt. Fájlba íráshoz a File.write/2 függvényt használd.

Valahányszor File.write/2-vel írsz fájlba, megnyílik egy fájlleíró, és elindul egy új Elixir folyamat. Ezért érdemes elkerülni, hogy ciklusban File.write/2-vel írj fájlba.

Ehelyett a fájlt a File.open/2 függvénnyel nyithatod meg. A File.open/2 második argumentuma a módok listája, amellyel megadhatod, hogy olvasásra vagy írásra szeretnéd megnyitni a fájlt.

A File.open/2 egy folyamat PID-jét adja vissza, amely kezeli a fájlt. A fájl olvasásához és írásához az IO modul függvényeit használd, és add át ezt a PID-et IO-eszközként.

Amikor végeztél a fájllal, zárd be a File.close/1 függvénnyel.

A File modul összes említett függvényének van egy ! jelű változata is, amely hibát dob ahelyett, hogy egy hibát jelző tuple-t adna vissza (például File.read!/1). Ezt a változatot akkor használd, ha nem akarod kezelni az olyan hibákat, mint a hiányzó fájlok vagy a hiányzó jogosultságok.

Utasítások

Nagy modellvasút-rajongó vagy, és úgy döntöttél, hogy egy hírlevél elindításával megosztod a szenvedélyedet a világgal. Azzal kezded, hogy elküldöd a hírlevél első számát azoknak a barátaidnak és ismerőseidnek, akik osztoznak a hobbidban. Van egy szövegfájlod, amely az e-mail-címeik listáját tartalmazza.

1. E-mail-címek beolvasása egy fájlból

Valósítsd meg a Newsletter.read_emails/1 függvényt. Paraméterként egy fájl elérési útját kapja. A fájl egy szövegfájl, amely újsorokkal elválasztott e-mail-címeket tartalmaz. A függvény adja vissza a fájlban szereplő e-mail-címek listáját.

Newsletter.read_emails("/home/my_user/documents/model_train_friends_emails.txt")
# => ["rick@example.com", "choochoo42@example.com", "anna@example.com"]

2. Naplófájl megnyitása írásra

Egy e-mail elküldése sok kiszámíthatatlan okból meghiúsulhat, például egy elgépelt e-mail-cím vagy átmeneti hálózati problémák miatt. Ahhoz, hogy újra megpróbálhasd elküldeni az e-maileket mindenkinek, anélkül hogy duplikátumokat küldenél, naplóznod kell azokat az e-mail-címeket, amelyek már megkapták az e-mailt. Ehhez szükséged lesz egy naplófájlra.

Valósítsd meg a Newsletter.open_log/1 függvényt. Paraméterként egy fájl elérési útját kapja, megnyitja a fájlt írásra, és visszaadja a fájlt kezelő folyamat PID-jét.

Newsletter.open_log("/home/my_user/documents/newsletter_issue1_log.txt")
# => #PID<0.145.0>

3. Elküldött e-mail naplózása

Valósítsd meg a Newsletter.log_sent_email/2 függvényt. Paraméterként a fájlt kezelő folyamat PID-jét és az e-mail-címet tartalmazó stringet kapja. Kiírja az e-mail-címet a fájlba, majd egy újsort.

Newsletter.log_sent_email(pid, "joe@example.com")
# => :ok

4. A naplófájl bezárása

Valósítsd meg a Newsletter.close_log/1 függvényt. Paraméterként a fájlt kezelő folyamat PID-jét kapja, és bezárja a fájlt.

Newsletter.close_log(pid)
# => :ok

5. A hírlevél elküldése

Most, hogy megvan az e-mail-küldés minden építőeleme, egyetlen függvényben kell összekapcsolnod őket.

Valósítsd meg a Newsletter.send_newsletter/3 függvényt. Paraméterként az e-mail-címeket tartalmazó fájl elérési útját, egy naplófájl elérési útját és egy névtelen függvényt kap, amely elküld egy e-mailt egy adott e-mail-címre. Beolvassa az összes e-mail-címet a megadott fájlból, és megpróbál e-mailt küldeni mindegyikre. Ha az e-mailt küldő névtelen függvény :ok értékkel tér vissza, írd ki az e-mail-címet a naplófájlba, majd egy újsort. Ezt mindenképpen rögtön az e-mail elküldése után tedd meg. Miután minden elküldéssel végeztél, zárd be a naplófájlt.

Newsletter.send_newsletter(
  "model_train_friends_emails.txt",
  "newsletter_issue1_log.txt",
  fn email -> :ok end
)

# => :ok
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Elixir Exercism

Készen állsz elkezdeni a(z) Hírlevél feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Elixir nyelvet 58 fogalom168 feladat segítségével, valódi emberi mentorálással, mindez ingyen.