Overview

Our second project is a simple command line script that counts the words in a file, much like the Unix command wc .

We'll see some differences between writing Elixir modules and one-off scripts and we'll see how to read a file. The most difficult part of the lesson is deciding how to split the file into words. We'll get a taste of the both the joy and the terror of regular expressions in the process.

Source code for this episode

The process

Use IO.gets to ask user the name of a file to open

to ask user the name of a file to open Use String.trim to get rid of trailing enter they press

to get rid of trailing enter they press Split the string into words with String.split and a regular expression

and a regular expression Filter out non words with Enum.filter

Count the words with Enum.count

The middle portion of the video also includes a detour showing some basics of regex and working with them in Elixir.

Elixir's mix utility is not used at all in this lesson. Neither is escript . Both are covered in a future lesson but there's some value in working with the very basics first, so that's what we did.

Challenge 2

See if you can extend the script build in this lesson so that the user can optionally count the number of lines or characters a file instead of the number of words.

Hint: The challenge in this lesson will be much easier if you look at the docs for Enum and see what Enum.each and Enum.at do.

(solution here)