January 2024
Intermediate to advanced
472 pages
5h 56m
Japanese
私は取り乱している / あなたに見捨てられたから /
でもチャッキーの腕に抱かれているから寂しくない
—— They Might Be Giants, "Cyclops Rock" (2001)
本章では、ファイルや標準入力を読み込んで、指定した部分だけを切り出すcutコマンドを作成します。切り出されるテキストは、ある範囲のバイトや文字になる場合もあれば、カンマやタブで区切られたフィールドになる場合もあります。「4章 headコマンド」では連続した文字やバイトの範囲を選択する方法を学びましたが、今回は選択範囲が非連続で任意の順序になりえます。たとえば、切り出す範囲として3,1,5-7を指定した場合、3番目の後に1番目、次いで5から7番目までのバイトや文字、フィールドを出力する必要があります。今回のプログラムでは元のプログラムを尊重しつつ、いくつか変更を加えて実装します。
本章では、以下の内容を学びます。
csvクレートを使って、区切り文字の含まれるテキストファイルを読み書きする方法*を使った値の参照解決(dereference)†1Iterator::flattenを使って、イテレータから入れ子構造を除去する方法Iterator::mapとIterator::flattenを組み合わせたIterator::flat_mapの使い方[†1] 訳注:「参照外し」と呼ぶ場合もあるが、本書では『プログラミングRust 第2版』に合わせて参照解決とした。
まずは、BSD版のcutコマンドのマニュアルページのうち、これから実装する機能に関連する部分を見てみましょう。
CUT(1) BSD General Commands Manual ...