Chapter 8. Shave and a Haircut
I’m a mess / Since you cut me out / But Chucky’s arm keeps me company
They Might Be Giants, “Cyclops Rock” (2001)
For the next challenge program, you will create a Rust version of cut, which will excise text from a file or STDIN.
The selected text could be some range of bytes or characters or might be fields denoted by a delimiter like a comma or tab that creates field boundaries.
You learned how to select a contiguous range of characters or bytes in Chapter 4, while working on the headr program, but this challenge goes further as the selections may be noncontiguous and in any order.
For example, the selection 3,1,5-7 should cause the challenge program to print the third, first, and fifth through seventh bytes, characters, or fields, in that order.
The challenge program will capture the spirit of the original but will not strive for complete fidelity, as I will suggest a few changes that I feel are improvements.
In this chapter, you will learn how to do the following:
-
Read and write a delimited text file using the
csvcrate -
Deference a value using
* -
Use
Iterator::flattento remove nested structures from iterators -
Use
Iterator::flat_mapto combineIterator::mapandIterator::flatten
How cut Works
I will start by reviewing the portion of the BSD cut manual page that describes the features of the program you will write:
CUT(1) BSD General Commands Manual CUT(1) NAME cut -- cut out selected portions of each line of a file SYNOPSIS cut ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access