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
csv
crate -
Deference a value using
*
-
Use
Iterator::flatten
to remove nested structures from iterators -
Use
Iterator::flat_map
to combineIterator::map
andIterator::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 ...
Get Command-Line Rust now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.