C 基本講座

関数でファイル入出力を行う

LinkedInラーニングの無料トライアルを今すぐ試そう

無料で視聴する すべての加入プランを見る
このレッスンでは、ファイル入出力関数を使って、テキストファイルへの入出力を行う方法を説明します。
講師:
10:39

字幕

このレッスンではファイル入出力関数を使ってテキストファイルへの入出力を行う方法を説明します。プログラムからの出力内容をファイルに保存することで再度参照したり、他のアプリケーションで利用することができるようになります。ファイル入出力を行う標準ライブラリ関数はたくさんの種類がありますが、ここでは1行単位でファイル入出力を行うfputs と fgets書式付きでファイル入出力を行うfscanf と fprintf を使ってテキストファイルへの入出力を行う手順を説明します。このプログラムはC ドライブの直下にある添付フォルダーの中のscore.txt から1行ずつ文字列を読み込みそれをそのまま score2.txt に書き込むものです。今 C ドライブの直下にある添付フォルダーの中にはscore.txt が存在します。開いてみると、このようなデータが書き込まれています。ではこの状態でプログラムを実行してみましょう。このように実行すると何も表示しませんが添付フォルダーの中にはscore2.txt が作成されています。開いてみると内容は score.txt と全く同じものです。ではソースコードを確認していきましょう。 まずファイル入出力を行う標準ライブラリ関数を使用するにはstdio.h の include が必要です。次に必要なのがファイルポインタの宣言です。ここでは入力用と出力用の2つのファイルポインタを宣言しています。ファイルポインタとはファイル型構造体へのポインタです。ファイル型構造体はstdio.h ヘッダーファイルの中で宣言されファイルの入出力を行う上での必要不可欠な情報を管理しています。ファイル入出力を行う際には必ずこのファイルポインタをfopen 関数によって取得しなければなりません。fopen は 15 行目と 20 行目の2箇所で行なっています。fopen でオープンするファイル名とモードを引数に指定します。すると返却値としてファイル構造体へのポインタを返却してきます。これは通常ファイルポインタと呼ばれます。15 行目ではオープンするファイル名にこのように記述しています。これは C ドライブの直下にある添付フォルダーの中のscore.txt という意味です。¥ から始める文字はエスケープシーケンスだと解釈されるのでファイルの区切りの文字¥ を記述するのにはこのように2つ続けて¥¥ と書きます。 同様に 20 行目ではscore2.txt ファイルをオープンします。2つ目の引数はどのようにファイルをアクセスするかを指定するモードです。テキストファイルに対するモードにはこの6種類があります。「読み込み」「書き込み」「追加書き込み」「読み込みと書き込み」「書き込みと読み込み」「読み込みと追加書き込み」この6種類です。15 行目では読み込みモードで20行目では書き込みモードでファイルをオープンしています。w モードはファイルが存在するときにはサイズを0にしてから新たに書き込みを行います。ですからこのプログラムは何度実行してもscore2.txt の内容はscore.txt と同じものです。この w モードを追加書き込みのa モードにすると何度かプログラムを実行を繰り返すとファイルの末尾にはscore.txt の内容がどんどん書き足されていきます。試しに、この w モードをa モードにして実行してみましょう。するとこの score2.txt の内容には先ほどの内容の後ろに新たにscore.txt の内容が追加で書き込まれています。ソースプログラムは元に戻しておきましょう。読み込みモードでオープンするときに指定したファイルがなかったり書き込みモードでオープンするときに他のアプリケーションがそのファイルを開いていたりするとオープンできずfopen 関数は NULL を返してきます。 そのため、NULL が返されたら必ずエラー処理を行うようにしてください。ここでは OS に異常があったことを知らせるために1を返却してリターンしています。1行単位でファイルから文字列を読み込むのにはfgets 関数を使用します。fgets の引数には入力した文字列を格納する配列とそして入力最大文字数とそしてファイルポインタを指定します。入力最大文字数はsizeof 演算子で配列サイズを取得すると良いでしょう。ファイルポインタは読み込めるモードでオープンしたものを指定してください。fgets は入力の終了時と異常時にNULL を返却します。26 行目では NULL でない間繰り返し処理を行いファイルのすべての行を読み込んでいます。尚、読み込んだ文字列には改行の ¥n がつけられるので注意してください。1行単位でファイルに文字列を書き込むのにはfputs 関数を使用します。fputs の引数には書き込む文字列とファイルポインタを指定してください。ファイルポインタには書き込みか追加が可能なモードを指定してください。28 行目では26 行目で読み込んだ文字列をそのまま書き込んでいます。使い終わったファイルは必ず fclose 関数でクローズしてください。 fclose の引数にはクローズするファイルのファイルポインタを渡します。では次に書式付きでファイル入出力を行うfscanf と fprintf について説明します。このプログラムは C ドライブの直下にある添付フォルダーの中のscore.txt から科目の点数を読み込み平均値を求めたらscore3.txt に書き込んでいます。実行してみましょう。実行するとこのようにscore.txt の内容に平均値を追加して score3.txt が作られていることがわかります。ではソースファイルの内容を説明しましょう。fopen と fclose については先ほど説明したので29 行目から 34 行目までのファイル入出力部分を説明します。29 行目の fscanf はファイルから書式付きで読み込みを行う関数です。ファイルポインタを指定する以外は標準入力関数のfscanf と同じように使えます。ここではオープンした score.txt からno、name そして3科目の点数を入力しています。fscanf は入力エラーかファイル終端に達するとEOF を返すのでそれまで while 文で入力を繰り返しています。 30 行目では入力した3教科の科目の点数を平均しています。32 行目の fprintf はファイルへ書式付きで書き込みを行う関数です。ファイルポインタを指定する以外は標準出力関数のprintf と同じように使います。ここでは w モードでオープンしたscore3.txt にno、name、3教科の点数と30 行目で求めたaverage を書き込んでいます。このレッスンではファイル入出力関数を使ってテキストファイルへの入出力を行う方法を説明しました。

C 基本講座

C言語はUNIXというOSを記述するために開発されたプログラミング言語で、組み込みシステムの開発を中心に今も使われています。このコースでは簡単なプログラムを作成しながら、C言語の基本的な文法を学びます。データ型や制御文などの基礎的な文法からポインタや構造体といったC言語の特徴的な内容まで幅広く取り上げます。よく使われる標準ライブラリ関数も数多く紹介します。

5時間45分 (60 ビデオ)
現在、カスタマーレビューはありません…
ソフトウェア・トピック
プラン加入者限定
発売日:2017年11月05日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。