step07 課題レポート:ファイルマージツール
ここまでは、この講座資料に掲載したサンプルプログラムを入力して実行という「写経」の連続だった。新しい言語を学ぶには、必ず通る道とはいえ、そろそろこの辺で、別の流儀にも挑戦してみよう。「要求仕様」を与えられて、それを満たすプログラムを自分で書くのである。
このstepでは、これまでに学んだ構文を使って、次節のような仕様を満たすプログラムを作り、「merge.py」のファイル名で提出する。
プログラムの要求仕様
このファイルマージツールmarge.pyは、2つのテキストファイルの内容を段落ごとに付き合わせて、新たなテキストファイルを作るものである。たとえば英語ファイルと、それを翻訳した日本語ファイルをマージすれば、以下のような対訳出力が得られる。外国語の本を翻訳する時など、機械翻訳(MT)と組み合わせると作業がたいへん捗る。などは、日英両方の文章がWebから無料で入手できる新聞社説※1などを対訳形式にすれば、語学の勉強にも役立つだろう。
1 たとえば「讀賣新聞」と「The Japan News」など。Webからデータを自動取得して対訳形式にするプログラムも、pythonを利用して書くことができる。この技術は、Webスクレイピングという。
仕様の詳細
- 2つの入力ファイルをA,Bとする。A,Bの名前は、コマンドライン引数として指定する。
- 出力は標準出力(sys.stdout)に対して行う。
- 1段落とは改行コードで終わる1行の文字列をいう。
- 標準出力には、以下の順序で繰り返し出力する。
- ファイルAの内容1行分
- ファイルBの内容1行分
- 空行を1行
- ファイルAおよびBのどちらかが先に終わり(EOF)に達した場合は、もう一方のファイルが終わるまで、空行と交互に出力する。その結果、ファイルA、Bの全行は、残らず出力に含まれる。
たとえば、ファイルA(右クリックでダウンロード可)の内容が、
ファイルB(右クリックでダウンロード可)の内容が、
であるとき、出力は、
となるはずである。 - 両方のファイルが終わったら、出力を終え、プログラムを終了する。
- 以下の場合に対応するエラー処理を行うこと。
- 引数の個数が違う。
- ファイルAまたはBが存在しない(オープンできない)。
作業手順とヒント
「急がば回れ」という通り、いきなりプログラミングを始めるより、簡単なフローチャートを描き、ロジックに間違いがないことを確かめるとよい。論理的に考える練習にもなるし、描いたフローチャートは将来の財産にもなる。フローチャートの箱の中身は日本語文でよい。
フローチャートの実例は、Webにたくさん「落ちている」※2。
このプログラムには、以下の要素が含まれるだろう。
- 引数からファイル名を得る
- ファイルを開く
- ループ処理
- それぞれのファイルが終わりに達したかの判定
- 出力構文
- ファイルを閉じる
- エラー処理
2 できる限り自分で考えてほしいが、参考のために実例を挙げる。