こんにちは､ そしてお帰りなさい｡
ファイルの入出力に関して､ もう一つ課題があります｡
具体的には､ ファイルの文字をすべて大文字に変換して､
その結果を一時ファイルに書き出すプログラムを書いてほしい｡
そして､ 一時ファイルを元のファイル名にリネームして､
一時ファイル名を削除してほしいのです｡
この課題では､ いろいろなことをやってもらうわけです｡
テンポラリファイルを使ったfopen関数の使い方を両方学びます｡
リネームを使うんですね｡
文字を大文字に変換したいので､ islower関数を使って文字が小文字かどうかをチェックする必要がありそうです｡
つまり､ 小文字なら大文字に変換したいわけです｡
また､ ここでは一時ファイルを使用するため､ renameとremoveの機能を使用することにします｡
つまり､ 変換を行うので文字の読み込みを使うので､ fgetcとfputcの関数を使う必要があるのです｡
最後に1つのファイルだけを存在させたいので､ renameとremoveの機能を使いたいのです｡
つまり､ ファイルを作成し､ その中にいくつかのコンテンツがあるわけです｡
そして､ 一時的にファイルを作成し､ 最終的に削除するのですが､ まず､
そのファイルを元のファイルにリネームします｡
そこで､ テンポラリーファイルも作成したいと思います｡
そして､ islower関数を使って､ 各文字を読み込むときに､
それが小文字であれば大文字に変換することを確認します｡
文字から32を引くと大文字に変換できます｡
つまり､ fgetcを実行すると､ 整数文字か通常の文字､ charが返されることになります｡
基本的には､ is lower関数を呼び出して､
文字データ型charを渡せばよいのです｡
そして､ 基本的に文字イコール文字マイナス32と言えば､
大文字に変換されます｡
なぜなら､ 文字はASCIIテーブルの一部であることを忘れてはならないからだ｡
つまり､ 一時的なファイルと､ すでに存在する読み込みたいファイルの2つを作成するわけです｡
その中にいくつかのデータが入っているだけのデータファイルを作成する必要があります｡
そして､ その両方を閉じて､ 最後にリネームと削除をしたい｡
というわけで､ fgetcの使い方にかなり慣れることになります｡
また､ 文字列を変換するたびにfputcでテンポラリファイルにデータを書き込む必要があります｡
つまり､ 文字を変換して､ その変換した文字にdoとfputcをそのファイルにつけるわけです｡
というわけで､ 参考になれば幸いです｡
何か質問があれば､ いつでもメールしてください｡
プログラムの一部として最後にしたいことは､ 元のファイルの内容を標準出力に表示することなので､
もう一度読み直します｡
テストするためにファイルを開く必要がないようにしたい｡
データを読み込んで小文字を探し､ 大文字に変換してから､
手動でファイルを開くという方法もあります｡
でも､ ファイルを見るのは嫌なんです｡
だから､ プリントアウトしてほしいので､ 最後の出力として､
読んで､ 書いて､ また読むということをやっています｡
しかし､ 最終的には1つのファイルが作成されるだけです｡
一時ファイルを作成し､ 古いファイルにリネームすることになります｡
そこで､ どのように行うかのデモを行います｡
いろいろなやり方があると思いますが､ 正しい方法でやってみましょう｡
ありがとうございます｡