C言語 入門 小学生でもわかるC言語3

初日 ファイル読み込み

「わかりやすく!」がテーマです!

HOME/小学生でもわかるC言語3 目次/初日 ファイル読み込み/

広告

↓2016年02月29日発売↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

新品価格
¥2,462から
(2016/5/10 22:16時点)

もっと!C、C++言語本

目次へ戻る

?と思ったら

わからなそうな用語集

ファイル読み込み

今回からファイルに関する事をやっていきたいと思います。

まずはテスト用に「test.txt」という名前のファイルを作ってソースファイルがおいてあるフォルダと同じトコロに保存してください。

もし「visual studio」を使っている場合で特別な設定をしていなければ

ドキュメント

Visual Studio 2013

Projects

ConsoleApplication1(プロジェクト名)

ConsoleApplication1(プロジェクト名)

みたいな順番でたどっていけばソースファイルがあるフォルダにたどりつきます。

実行結果(i-1-1)

ソースファイルがあるフォルダです。

「Source.cpp」というのがソースファイルになります。

ファイルの内容は

実行結果(i-1-2)

こんな感じにしてみました。

それではファイルの読み込み作業に入っていきましょう!

ファイルオープン・ファイルクローズ

/*プログラム1*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(){
	FILE *fp;

	fp = fopen("test.txt", "r");
	if (fp == NULL){
		printf("ファイルオープン失敗\n");
		exit(1);
	}
	printf("ファイルオープン成功\n");

	fclose(fp);
	return 0;
}

■実行結果■

実行結果(i-1-3)

ヘッダファイルなどなど

先頭にいつもの「stdio.h」の他に

#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>

こちらが必要になります。

「stdlib.h」は後ほど紹介する「exit()」という関数を使う時に必要になります。

この「〜.h」というのは正式にはヘッダファイルといいまして、このファイルの中にはそれぞれいろいろな関数が入ってます。

それを「#include」挿入(そうにゅう)する事によってその関数が使えるようになるワケです。

ではいつも使っていた「stdio.h」には何が入っているかというとなんと「printf()」関数などが入っております。

これがなければC言語は「printf()」関数も使えないワケです。

逆にいうとこのヘッダファイルに超強力なヘッダファイルを加える事によって画像やら音楽やらが使えるようになったりします。

興味がある方は「DXライブラリ入門」こちらを参考にしてみてください。

続いて

「#define _CRT_SECURE_NO_WARNINGS」

これはコンパイラから出されるセキュリティ上の警告を無視する為にこれを書きます。

C言語の古くからある関数の中には使い方を間違えるとセキュリティ上大変危険な関数がいくつかあります。

大規模なシステム開発などでそのようなセキュリティ上の問題が発生してしまうと非常にマズイのでいちいち「大丈夫ですか?」と警告してくるワケです。

そこでセキュリティの対策された関数を使えば良いのですが、初心者には少し難しいので昔からあるわかりやすいシンプルな関数を使う為にこの

「#define _CRT_SECURE_NO_WARNINGS」

を入れて警告を無視するというワケです。

ファイル用変数「FILE」

それでは改めてファイル操作に戻りたいと思います。

ファイルを操作する時にはまずファイル用の変数を用意してそこにファイルの先頭を結びつけます。

これをファイルオープンといいます。

FILE *fp;
fp = fopen("test.txt", "r");

こちらですね。

ファイル用の変数は「FILE」という型を使ってポインタで宣言します。

なので先頭に「*fp」と「*」アスタリスクがつく事に注意です。

続いてファイルの先頭をこの変数に結びつけます。

fp = fopen("ファイル名","モード");

ファイル名とモードを指定して結びつけます。

この「モード」っていうのはどのようにファイルを読むか選択するもので他には

「r」

読み込み用、ファイルがない場合はエラー。

「w」

書き込み用、ファイルがない場合は新しく作成、すでにある場合は内容を書き換え。

「a」

追加用、ファイルがない場合は新しく作成

などがあります。

それぞれ書き込み・読み込みの両方使えるモードにしたい場合は

「r+」「w+」「a+」とプラスをつけます。

続きを見てみます。

if (fp == NULL){
	printf("ファイルオープン失敗\n");
	exit(1);
}

こちらはエラー処理になります。

「NULL」っていうのは空っぽみたいな意味になり、エラー処理の時などによく登場します。

ファイルのオープンに成功するとファイル変数にはそのファイルの先頭アドレスが入ります。

なので「fp == NULL」の場合はその入るはずのアドレスが入っておらず空っぽみたいな意味になるのでエラーになるのです。

そしてファイルのオープンに失敗した場合はマズイ事にならないようにここで「exit(1)」というのを使って強制的に終了します。

ファイルのオープンが無事に終わり最後正常に終了する時は

fclose(fp);

こちらを使ってファイルをクローズします。

内容を表示

ではファイルのオープン・クローズがわかったトコロで次はその内容を表示してみます。

/*プログラム2*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(){
	int get_c;
	FILE *fp;

	fp = fopen("test.txt", "r");
	if (fp == NULL){
		printf("ファイルオープン失敗\n");
		exit(1);
	}

	get_c = fgetc(fp);
	printf("%c",get_c);

	get_c = fgetc(fp);
	printf("%c",get_c);

	get_c = fgetc(fp);
	printf("%c",get_c);

	fclose(fp);
	return 0;
}

■実行結果■

実行結果(i-1-4)

ファイルの内容を読むには何種類か方法がありますが今回はその中の「fgetc()」という関数を使ってみます。

これはファイル(f)から一文字(c)ずつ読み込む(get)関数になります。

「int」型の変数を用意してそこにこの「fgetc()」で読み込んだ内容を入れます。

ここで上のプログラムに注目です。

3回ほど「fgetc()」を実行しているのがわかると思います。

実行結果もきちんと3文字分表示されております。

つまりは一文字読んで次に進んで一文字読んで次に・・・。

みたいな動作をします。

細かい部分は置いといてここで大事なのがこの「fgetc()」は実行するたびに勝手に次に進むという事です。

なのでその性質を利用して「while()」ループなどでこの「fgetc()」を実行し続ければファイルの最後まで勝手にいってくれるという事ですね。

/*プログラム3*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(){
	int get_c;
	FILE *fp;

	fp = fopen("test.txt", "r");
	if (fp == NULL){
		printf("ファイルオープン失敗\n");
		exit(1);
	}
	
	while (1){
		get_c = fgetc(fp);
		if (!feof(fp))printf("%c", get_c);
		else break;
	}

	fclose(fp);
	return 0;
}

■実行結果■

実行結果(i-1-5)

「while()」ループを加えてみました。

while (1){
	get_c = fgetc(fp);
	if (!feof(fp))printf("%c", get_c);
	else break;
}

ここではファイルの最後まで読み込む事が目的なのでファイルの最後かどうかを調べる関数「feof()」を使います。

この関数はファイルの最後に到達した時には「0」以外になり、ファイルの途中では「0」になります。

なので「if (!feof(fp))」の時、ファイルが最後ではない時に必要な処理を実行して、そうでなければ「else」に「break」を指定しておけばファイルの最後で読み込みが終了できるというワケですね!

それでは次回はこの読み込んだ値を利用してみたいと思います。

次回

二日目 ファイルの値を利用する

□ページの先頭へ□

□目次へ戻る□

広告

↓2014年06月20日発売↓

14歳からはじめるC言語わくわくゲームプログラミング教室 Visual Studio 2013編

新品価格
¥2,500から
(2016/5/10 22:17時点)

↓2014年10月25日発売↓

超本格! サンプルで覚えるC言語 3Dゲームプログラミング教室

新品価格
¥3,110から
(2016/5/10 22:18時点)

↓2013年07月25日発売↓

小学生からはじめるわくわくプログラミング

新品価格
¥2,052から
(2016/5/10 22:21時点)

↓2016年05月13日発売↓

小学生からはじめるわくわくプログラミング2

新品価格
¥2,052から
(2016/5/10 22:22時点)

もっと!C、C++言語本