こんにちは､ そしてお帰りなさい｡
今回の講義では､ ファイルからの読み出しに初めて挑戦するデモを行いたいと思います｡
fgetcを使って､ ファイル内の行数を数えてみます｡
では､ コードブロックを表示し､ プロジェクトを作成してみましょう｡
ここでは､ 新規プロジェクトと言うことで､
基本的な読み方を揃えるだけです｡
そこで､ コンソールアプリケーションのセレクトcと言いますが､ これをベーシックと名付けるか､
行数をカウントするのはどうでしょう｡
そして､ これが私たちのメインを作ることになるのです｡ cが良い｡
しかし､ このアプリケーションを開始する前に､ 実際にテキストを含むファイルを作成したいと思います｡
書いているわけではないので､ 行数を読み込んでいるだけです｡
だから､ プロジェクトをどこに保存したかを把握しておく必要があるのです｡
ダウンロードディレクトリの中にプロジェクトを保存しています｡
そして､ ダウンロード・ディレクトリの中に新しいプロジェクトを作成すると､ そのプロジェクト名に移動します｡
私のプロジェクト名は行数です｡
だから､ 行数のカウントの内側には､ 私のメインがあるのです｡ c ファイルを作成します｡
このディレクトリの中にファイルを作成することができます｡
ディレクトリの中で右クリックして､ 新規作成と言いながら､
テキストファイルを作成するのです｡
これは新しいテキスト文書で､ テストすることになります｡ テキストを表示します｡
開いてみる｡
どのエディターで開いてもいいのですが､ これはワードパッドです｡
セリフが入るんですよ､ こんにちは｡
これは会計のためのテストになります｡
ファイルを作成したことで､ 実際に何かを実装し始めることができるようになりました｡
まず､ ファイル名用の定数変数を作りたいと思います｡
だから､ defineでいいんです｡
これは私のファイル名を表すことになります｡
ファイル名をすべて大文字にして､ 先ほど名付けたものと同じになるようにしています｡
テキストで､ テストしてください｡ テキストを表示します｡
そして､ 私のコードはすべて私のメイン関数になるのです｡
ファイルポインタを作成したいのですが｡
ファイルポインタを作るには､ 全角のFILEを使い､ starと言ってから､ fpと言えばいいことを思い出してください｡
そして､ それをnullに初期化するつもりです｡
ファイルの読み書きをするときは､ 必ず標準のlibを入れなければなりません｡
h.
また､ 使用するキャラクターを1人分作成します｡
charと言いながら､ 全部の行のカウンターを作ってしまうんです｡
int行数ということになりますね｡
そして､ それを0に初期化します｡
ファイルから何らかの読み取りを行う場合､ まず最初にしなければならないのは､
ファイルを開くことです｡
つまり､ fのオープン関数は､ ファイルポインタを返すことになる｡
だから､ それを変数fpに代入して､ f openと言いたいのですが､
すでに定義したファイル名は定数で､ ファイル名です｡
そして､ 読書と読書だけのために開き直りたいので､ rと言うだけです｡
ここでは､ ファイル名を定数としてfopenを実行し､ 二重引用符でrを囲んで､
モードを指定します｡
読み取り専用にしたい｡
書きたくありません｡
rプラスをやったら､ 同様に書きます｡
ポインタを使用する前に､ ポインタはファイルを表します｡
ポインタがnullと等しくないことを確認したいので､
fを行いたい｡
fpがnullに等しいと言いたい｡
そして､ もしnullと等しい場合は､ エラーを表示して返したいだけです｡
だから､ printf file does not existのような､ 何でもいいからやりたいんです｡
そして､ これはその後です｡
この関数から負の1を返したいだけなのです｡
ファイルを開いた後､ 今度は実際に文字を読み始めることができますので､
whileループを書き､ 文字がfgetcに等しい間と言いたいのです｡
Fgetcは1文字を読み取っています｡
ファイルポインタを渡して､ 基本的にはeofが出るまで文字を読むと言いたいのです｡
だから､ eofと等しくなくなるまでと言うのです｡
そして､ ループから飛び出す､ こんな感じです｡
だから､ ファイルの最後まで文字を読み込むことになるんだ｡
文字が改行でない限り､ 改行を見たときだけインクリメントするようにしたい｡
つまり､ 文字が改行と等しい場合､ 基本的にカウンターを増加させたいと思います｡
行数カウントプラスプラスと言えば､ 行数をカウントしてくれるんです｡
そして､ ファイルの終端まで来たらループから飛び出す｡
でも､ 私たちがアカウントを勧めるのは､ 改行があった場合だけなんです｡
書き込みを読み終わった後､ いつも最後にしたいことは､ ファイルを閉じることです｡
つまり､ fclose と言ってから､ ファイルポインタを渡したいわけです｡
そして､ ファイルポインタをNULLに設定することも必要です｡
そして､ 実行した行数をプリントアウトすることができるのです｡
つまり､ printf total number of lines r percent d backslash n と言って､ 行数を入れればいいわけです｡
そして､ メインから戻るだけ､ そんな感じです｡
もう一度､ このコードを説明すると､ ファイルポインタを作成し､ それをNULLに設定して､
キャラクタと行数をカウントするためのローカル変数を作成します｡
12行目でファイルを開いています｡
読み取り専用モードで開くのです｡
NULLでないことを確認してから､ ファイルの終わりまで各文字を読み込むwhileループを実行します｡
改行があるたびに､ そのカウンターをインクリメントする｡
そして､ ファイルを閉じて､ ポインタをnullに設定します｡
そして､ 行数をプリントアウトするのです｡
さっそく作ってみましょう｡
そして､ 余分な改行があることを､ 私たちは確認したいのです｡
そこで､ printfのカンマを忘れないようにしたい｡
そして､ これを実行すると､ 作成したファイルから読み込んで､ 何行あるのかを教えてくれるのです｡
だから､ 総行数は6行と書いてある｡
テキストファイルを開くと､ 1､ 2､ 3､ 4､ 5､ 6の6行があることに気がつくはずだ｡
実は7つあるんです｡
だから､ eofを得るまで､ 最後の1つをインクリメントする必要がある｡
これは､ ファイルの終端を打つ前に最後の改行をしているためです｡
だから､ 実際にこれをもう一つにして､ 実行すると実際に動くようにしたいのでしょう｡
そこで今回は､ 2行ほど追加することにします｡
そしてこの場合､ 1､ 2､ 3､ 4､ 5､ 6､ 7､ 8､
9行になるはずです｡
ファイルを閉じます｡
もう一度実行してコンパイルすれば､ 9個になるはずです｡
この場合､ 9となる｡
そこで､ このソースコードを保存しておくことにします｡
ダウンロードすることができます｡
fgetcを使ってファイルからデータを読み取るための基本的な方法を説明します｡
また､ fgetsにも慣れておきたいところです｡
そして､ 出力をフォーマットするために､ fscanfを使用して､ フォーマットされた出力を読み込むことができます｡
参考になったでしょうか｡ ありがとうございます｡