Grep

Grep

Nehéz

Bevezetés

Elszegődtél egy helyi könyvtárba, hogy segíts rendezni a régi könyvek gyűjteményét. A diák olvasók gyakran homályosan felidézett idézeteket keresnek, hogy hivatkozhassanak rájuk a szemináriumi dolgozataikban. Ahelyett, hogy minden könyvet kézzel olvasnál el elölről a végéig, úgy döntesz, építesz egy kis eszközt, amely átfésüli a könyveket, és megkeresi ezeket a töredékes idézeteket.

Utasítások

Keresd meg a fájlokban azokat a sorokat, amelyek illeszkednek egy keresési stringre, és add vissza az összes egyező sort.

A Unix grep parancs a fájlokban olyan sorokat keres, amelyek illeszkednek egy reguláris kifejezésre. A feladatod egy egyszerűsített grep parancs megvalósítása, amely rögzített stringek keresését támogatja.

A grep parancs három argumentumot kap:

  1. A keresendő string.
  2. Nulla vagy több kapcsoló, amelyekkel testreszabhatod a parancs viselkedését.
  3. Egy vagy több fájl, amelyekben keresni kell.

Ezután beolvassa a megadott fájlok tartalmát (a megadott sorrendben), megkeresi azokat a sorokat, amelyek tartalmazzák a keresési stringet, és végül visszaadja ezeket a sorokat abban a sorrendben, ahogy megtalálta őket. Ha több fájlban keresel, minden egyező sor elé a fájl neve és egy kettőspont (':') kerül.

Kapcsolók

A grep parancs a következő kapcsolókat támogatja:

  • -n A kimenet minden sora elé írd oda a sorszámot és egy kettőspontot (':'); a számot a fájlnév után helyezd el (ha van).
  • -l Csak azon fájlok nevét írd ki, amelyek legalább egy egyező sort tartalmaznak.
  • -i Kis-nagybetűre érzéketlen összehasonlítással keress.
  • -v Fordítsd meg a program működését, és gyűjtsd össze az összes olyan sort, amely nem egyezik.
  • -x Csak azokra a sorokra keress, ahol a keresési string a teljes sorral egyezik.

Az IO folyamata

A többi feladattól eltérően a grep esetében a „külvilággal” is kapcsolatba kell lépni: fájlokat kell olvasni, rendszerhibákat kezelni, és a stdout-ra írni.

A Leanben a rendszerrel való interakció általában az IO monádban történik, amely lehetővé teszi, hogy a mellékhatások egy elkülönített környezetben jelentkezzenek, anélkül hogy a legtöbb más függvény tiszta állapotát befolyásolnák.

Argumentumok beolvasása

A Leanben egy fájl futtatható szkriptként is meghívható, akár közvetlenül, önálló szkriptként a lean --run paranccsal, akár a lake használatával.

Egy Lean-projektnek egyetlen belépési pontja van: a main nevű függvény, amely egy List String-et kap, benne a neki átadott összes argumentummal. Azért, hogy ebben a feladatban ugyanúgy kapja meg az argumentumokat, mintha a Grep.lean-t futtatható programként futtatnánk, az átadás ugyanígy történik.

Fájlok olvasása

A Lean függvényeket kínál a fájlok kezelésére az IO.FS monádban. Például az IO.FS.readFile segítségével egy adott útvonalon lévő fájl tartalmát olvashatod be String-ként.

Kimenet írása

A feladatban az eredményt nem visszatérési értékként kell megadni, hanem a szabványos kimenetre vagy a szabványos hibakimenetre kell írni. Erre a célra függvények állnak rendelkezésre a Leanben.

Rendszerhibák kezelése

A Except-beli hibákkal ellentétben az IO kivételei valódi futásidejű kivételek. A kezelésükhöz használhatod a try/catch szerkezetet:

try
    /- 
        code that may possibly raise an exception 
    -/
catch msg =>
    /-
        code that is executed only if an exception was thrown
    -/
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Lean Exercism

Készen állsz elkezdeni a(z) Grep feladatot?

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