As we saw with "maths", modules of code can be imported to provide data and functions in addition to the built-in ones.
For example, the os
module has a function named cwd
which returns the 'current working directory'.
import("os")
os.cwd
┌──────────┐ │ dirname │ ├──────────┤ │ localdir │ └──────────┘
There's also a function os.file
which, given one or more dirname
, returns the filenames in those directories.
So we can compose the two of them to get a list of the files in the current directory.
os.file(os.cwd)
┌─────────────────┬─────────────────────────┬──────┬────────┐ │ filename │ path │ size │ is_dir │ ├─────────────────┼─────────────────────────┼──────┼────────┤ │ test.txt │ /localdir/test.txt │ 49 │ false │ │ subdir │ /localdir/subdir │ 4096 │ true │ └─────────────────┴─────────────────────────┴──────┴────────┘
Futhermore, there's another function os.file_content
which, given one or more file path
, returns the contents of those files.
So we can compose all three, and we can use all our relational query features to get a list of selected files and their contents.
os.file_content(os.file(os.cwd)[not is_dir])
┌──────────┬──────┬────────┬─────┬────────┬────────────────────────────────────────────┐ │ filename │ size │ is_dir │ sep │ format │ r │ ├──────────┼──────┼────────┼─────┼────────┼────────────────────────────────────────────┤ │ test.txt │ 49 │ false │ │ │ ┌─────┬──────────────────────────────────┐ │ │ │ │ │ │ │ │ seq │ ss │ │ │ │ │ │ │ │ ├─────┼──────────────────────────────────┤ │ │ │ │ │ │ │ │ 0 │ This is a test file │ │ │ │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ 2 │ It has several lines │ │ │ │ │ │ │ │ │ 3 │ of text. │ │ │ │ │ │ │ │ └─────┴──────────────────────────────────┘ │ └──────────┴──────┴────────┴─────┴────────┴────────────────────────────────────────────┘
The file contents are currently read into lines but in future we'll be able override that by passing a variety of format
and sep
options. For now we can re-combine the lines if we want to form a single block of file data, e.g. using str_rel
os.file_content(os.file(os.cwd)[not is_dir])(str_rel){filename, s}
┌─────────────────────────┬──────────┐ │ s │ filename │ ├─────────────────────────┼──────────┤ │ This is a test file │ test.txt │ │ │ │ │ It has several lines │ │ │ of text. │ │ └─────────────────────────┴──────────┘