こんにちは､ そしてようこそ｡
今回の講義では､ 前回の課題である「小文字を含むファイルを大文字を含むファイルに変換する」という解決策を提供したいと思います｡
一応､ 一時ファイルを作るので､ リネームや削除などが必要です｡
そして､ プログラムの最終的な出力は､ ファイルになる予定です｡
すでに大文字に変換されているファイルを読み込むことになります｡
では､ コードブロックを出して､ プロジェクトを作成しましょう｡
新規プロジェクト､ コンソールアプリケーション､
go cと言い､ これは小文字のファイルを変換すると言うことにします｡
これをメインにしてもらえばいいんです｡ c.
読み書きをしたり､ fopenなどを使ったりするので､
標準的なioヘッダを作成することを確認したいのです｡
そこで､ 私がいつもやってみたいのは､ ファイルを前もって作っておくことです｡
そこで､ ここではファイル名用の定数を定義することにします｡
これをdefineと呼ぶことにしよう｡
そして､ 今回はテストということになります｡ テキストを表示します｡
それで､ ファイル名を全角にすると言うことです｡
その大会をやるのが好きなんです｡
そして､ 実際にプロジェクトでファイル名を作成します｡
だから今回も､ ダウンロードディレクトリの中にファイルを保存しています｡
私のプロジェクトはすべてそこに格納されています｡
そして今回は､ 小文字のファイルを変換するというプロジェクトがあります｡
同じディレクトリにちゃんと置いて､
IDEから実行できるようにするんだ｡
新しいテキストファイルを作ります｡
このテストに名前をつける｡ テキストを表示します｡
そして､ それを持ち出して､ 小文字と大文字を並べるだけです｡
では､ ジェイソンがテストをしているとしよう｡ さて､ どんなテストでも､ 最終的に大文字になるものと小文字になるものがありますが､
これらは必ず大文字になる､ これも課題です｡
これでよしとしよう｡
このファイルの最終結果は､ テストになるわけです｡ txtファイルに､ このようにすべて大文字で記述します｡
でも､ 大文字もあれば小文字もある状態で保存するんです｡
これでファイルの作成が完了しましたので､ 実際に読み書きを行ってみましょう｡
ファイルポインタをいくつか作って､ fileはすべて大文字､ starはfpとすることにします｡
このポインタをNULLに初期化し､ もう1つのファイル・ポインタをfp1として､
これもNULLに等しくなるように作成するつもりです｡
ここでも2つ必要なのは､ 読み込みと書き込みを別々のファイルに行うためで､
基本的には一時ファイルです｡
また､ 文字変数を作って､ fgetcを使って読み込んだ文字にします｡
そして､ これも同様にnullにしておくか､ より良い方法は､ 空の文字列にしておくことです｡
まず､ 1つ目のファイル（fp）と2つ目のファイル（temp）を読み込みモードでオープンする必要があります｡
だから､ fpイコールfopenと言うことになる｡
ファイル名のテストを使ってみる｡ テキストを表示します｡
そこでファイル名､ そして読み取り専用で開くことにします｡
そして､ これがヌルであることを確認したいのです｡
だから､ もしfpがnullに等しいなら､ マイナス1を返すだけだと言うつもりだ｡
そして､ テンポラリファイルを作成したいと思います｡
そこで､ ここでは一時ファイルを作成することにします｡
そして今回は､ 書き込み用のファイルを開いてみます｡
そこで､ 私のfp1ポインタを使い､ fopenとします｡
これはテンプレと呼ぶしかないでしょう｡ テキストが存在しなければ､ それを作成することになります｡
そして､ write onlyに書き込むので､
wをつけます｡
繰り返しになりますが､ ここでやりたいことは､ fp1がnullと等しくないことを確認したいのです｡
ということで､ fp1ということで｡
もしnullと等しいなら､ マイナスを返すだけです｡
そこで今度は､ 読む用と書く用の2つのファイルを開いてみた｡
書き込みは､ テンポラリファイルに対してです｡
次にやりたいことは､ ファイルから読み込んで､ すべての大文字を書き出すことです｡
そこで､ 読み込みにwhileループを追加し､ 文字データ型chがfgetcと等しい間､
私のテストから読み込むと言うことにしたいと思います｡
テキストなので､ fpと､ ファイルの終端に当たらないまでやりたいのです｡
だから､ eofとイコールではない､ と言えるのです｡
Eofは特殊な定数です｡
whileループの中で､ 読んでいる文字の中に小文字があるかどうかをチェックしたい｡
だから､ if is lower ch と言って､ 小文字を見つけたら､
その文字を大文字に設定するだけにしたいのです｡
だから､ chはchマイナス32に等しいと言えるんだ｡
これにより､ 大文字に変換されます｡
そして､ 変換した後に､ 変換したのかしないのか､ 大文字なのかそうでないのか､
それを一時ファイルに書き出したいのです｡
だからここではfputcと言えるのです｡
そして､ 書きたい文字とファイルポインタ（fp1）を言うだけでいいのです｡
だから､ 文字を読むたびに､ それをテンポラリファイルに書き込んでいるんだ｡
小文字なら大文字に変換して書いていますしね｡
つまり､ このwhileループの最後には､ テストに使用したすべての文字を含むtempファイルが作成されます｡
のテキストを大文字で表示します｡
それで､ その2つのファイルの読み書きが終わったんです｡
だから､ fclose fp と fclose fp1 と言える｡
ここで､ tempファイルの名前をtestに変更したいと思います｡ のテキストファイルです｡
ここでは､ renameと言ってrename関数を呼び出すだけで､
tempと言うことができるのです｡ テキストをリネームしたいのです｡
そして､ 名前を変えたいのはtestです｡ テキストにするか､ 私の定数である filename
を使用します｡
まだテンポラリファイルを作成したままです｡
そこで､ 一時ファイルを削除したいのです｡
そこで､ 一時ファイルを削除してください｡
ここでは､ remove関数を呼び出して､ tempで渡すことができます｡ テキストを表示します｡
そして最後に､ テストの内容をプリントアウトしたいと思います｡
のテキストファイルは､ 大文字に変換されます｡
fpを閉じるのではなく､ それはtestを指しているからです｡ text, 今更閉じるわけにもいかず､ fp1がテンプレだったので､
fp1だけ閉じることができました｡
というテキストがあり､ それをリネームして削除しています｡
実は名前を変えたので､ 閉じなければならないのです｡
だから､ fpを閉じないといけないんです｡
そこで､ 今度は43行目で､ 中身を読んでプリントアウトしたいので､ fpを再び開きたいと思います｡
だから､ fp fopen ファイル名とか､ sorry ファイル名とか言って､ 読み込みたいんです｡
だから､ rとしか言いようがない｡
もう一度､ NULLでないことを確認したい｡
そして､ もしそれがnullと等しいなら､ 私は戻りたいのです｡
そして､ リターン・ネガを言いたいだけなんです｡
インプットを印刷することができました｡
そして､ ここではデータを読み込んで､ そのままプリントアウトしたいと思います｡
だから､ もう1回whileループができるんです｡
まだ何もプリントしていないので､ while
ch equals fgetc fp and not equal to eofとすればよいのです｡
そして､ やりたいことは､ chをプリントアウトすることだけです｡
だから､ パーセントc chと言えばいいわけです｡
そして最後に､ 最後のファイルであるfpを閉じ､ fpをnullに､
fp1をnullに設定します｡
だから､ これがビルドされるようにしよう｡
だから､ もう大丈夫なんです｡
コンパイルして､ 54の行にセミコロンを入れて そこにコロンを入れていたんです｡
このコードに戻ると､ 2つのファイルポインタが作成されています｡
私たちには､ 私たちの不変のものがあります｡
1つのファイルを開いてみる｡
そこから読み解く｡
そして､ 読みながら､ 一時ファイルに書き込んでいます｡
その後､ 一時ファイルを削除しています｡
名前の変更と削除が必要なので､ 読み込んでいるファイルとtempファイルの両方を削除する必要があるのです｡
すでに開いている関数やファイルに対してrenameやremoveを呼び出すことはできないので､ それらを閉じなければならない｡
そこで､ 再度開き､ データをプリントアウトします｡
そこで､ これを実行します｡
からのすべての文字情報が出力されるはずです｡
このプログラムを実行すると､ すべて大文字でプリントアウトされることがわかります｡
もう一度､ 実行すると､ すべて大文字でプリントアウトされます｡
ディスク上のファイルを見れば､ テストを見ることができる｡ のテキストは､ すべて大文字で書かれていることがわかります｡
もう一度言いますが､ これを変えて､ もう少し小文字を変えたい場合｡
そこで､ ここに小文字で保存し､ プログラムを実行すると､
すべてが大文字に変換されます｡
もう一度､ これを実行すると､ 大文字でプリントアウトされます｡
見てみると､ すべて大文字なんです｡
そこで､ 小文字を大文字に変換してくれるちょっといいプログラム｡
ここでは､ ファイル・ポインタのfopenという重要な関数を使用しています｡
そして､ 素敵なfclose removeとrenameを使用しています｡
そして､ fopenとfgetcです｡
ご不明な点がございましたら､ メールにてお問い合わせください｡
このソースファイルをZIPファイルとして保存しておきますので､ 見てみてください｡
ありがとうございます｡