• 検索結果がありません。

PowerPoint Presentation

N/A
N/A
Protected

Academic year: 2021

シェア "PowerPoint Presentation"

Copied!
10
0
0

読み込み中.... (全文を見る)

全文

(1)

プログラミング入門2

芝浦工業大学情報工学科

青木 義満

ファイルの入出力

今回の講義内容

ファイル入出力

ファイルからのデータ読込み

ファイルと配列

(2)

プログラミング入門2 3

ファイルへのデータ書き込み(復習)

ソースファイル名:fileio1.c

データをファイルに書き込み

#include <stdio.h> int main(void) { FILE *fp; int student_id = 100; char name[ ]= "morishima"; double tensu = 95.5;

fp = fopen("test.txt","w");

fprintf( fp, "%d¥n", student_id ); fprintf( fp, "%s¥n", name ); fprintf( fp, "%f¥n", tensu );

fprintf( fp, "%d %s %f¥n", student_id, name, tensu ); fprintf( fp, "%d¥t%s¥t%f¥n", student_id, name, tensu );

fclose(fp); return(0); }

ファイルポインタ宣言

ファイルに書き込むデータ “test.txt”という名前でファイルをオープン (書き込み用) データをファイルに書き込み ファイルを閉じる 100 morishima 95.5

ファイルからのデータの読込みの必要性

ファイルに格納されているデータを,プログラム中に

読み込んで処理

1 aoki 80.5 100 morishima 95.5 50 tokunaga 70.4 ・・・・・・ ・・・・・・ ・・・・・ ・・・・・

ファイル~成績表リスト

int student_id[NUMBER]; char name[NUMBER][256]; double score[NUMBER]; ・・・・・・・・・・・ ・・・・・・・・・・ ・・・・・・・・・・ ・・・・・・・・・・

プログラム~xxx.c

(3)

プログラミング入門2 5

データの作成(野球選手成績リスト)

ソースファイル名:player1.c

チーム名,選手名,ホームラン数をファイルに書き込み

#include <stdio.h> #define NUM 100 /* 最大100人までの選手データを扱う */ int main(void) { FILE *fp; char team[NUM][256]; char name[NUM][256]; int hr[NUM]; int i; fp = fopen("player.txt","w"); /* キーボードから選手データを読込み */ for(i=0; i < 5; i++){

printf("Input Players' Data¥n"); printf("Team : "); scanf("%s", team[i]); printf("name : "); scanf("%s", name[i]); printf("Homerun : "); scanf("%d", &hr[i]); } for(i=0; i < 5; i++){ /* 読み込んだデータを画面表示 */ printf( "%s %s %d¥n", team[i], name[i], hr[i]); /* 読み込んだデータをファイルへ書き込み */ fprintf( fp, "%s %s %d¥n", team[i], name[i], hr[i]);

} fclose(fp); return(0); } G Matsui 50 L Matsui 33 D Fukudome 20 ・・・・・・ ・・・・・・ ・・・・・ ・・・・・

player.txt

ファイルからのデータの読み込み

ファイルからデータを読み込む際の手順

ファイルを開く (読込みモードで)

変数へのデータの読込み

fscanf関数等を使用

ファイルを閉じる

(4)

プログラミング入門2 7

ファイルを開く ~ fopen関数

データを読み込む対象の

”ファイル名” を指定

読み込みモードを指定(2つ目の引数に”r”を指定)

読み込みモードでファイルを開く操作

FILE *fp;

fp = fopen( “file.txt”, “r” );

file.txt

(ファイル)

FILE *fp

(ファイルポインタ)

ファイル名

読込みモード ファイルを指定

fp を介して,ファイルにアクセスが可能!

ファイルを開く際のモードの種類 (テキストファイル)

モード

意味

“r”

読込み用にファイルを開く。ファイルが存在しない場合や

見つからない場合は失敗する。

“w”

書き込み用にファイルを作成。ファイルが存在する場合は

そのファイルの内容は破棄する。

“a”

追加書き込みのために既存ファイルを開く。ファイルが存

在しない場合には作成する。

“r+”

読み書き用にファイルを開く。ファイルは存在していなけ

ればならない。

“w+”

読み書き用にファイルを作成。ファイルが存在する場合に

は,そのファイルの内容は破棄する。

“a+”

読込みと追加の両方のモードでファイルを開く。ファイル

が存在しない場合は作成する。

(5)

プログラミング入門2 9

ファイルからのデータの読込み

~ fscanf関数

scanf関数(キーボードからのデータ入力)

f

scanf関数(

f

ileからのデータ入力)

fscanf関数の書式

scanf関数

scanf( “%d”, &x);

fscanf関数

fscanf( fp, “%d”,

&

x );

データを読み込む対象の のファイル(ポインタ)

100

file.txt

fp = fopen( “file.txt”, “r” );

プログラム中の変数

int x

fscanf

fscanf関数の使用例

実数データの読み込み

文字列データの読込み

1行に並んでいる複数の型のデータを読み込み

ファイル:fscanf( fp, “%lf”, &x );

文字配列1つ:

char name[256] ← fscanf( fp, “%s”, str );

複数の文字配列:

char name[5][256] ←

fscanf( fp, “%s”, str[i] );

(6)

プログラミング入門2 11

ファイルを閉じる

使い終わったら,後片付け

ファイルを閉じる

ファイルを開く時に指定したファイルポインタを指定

fclose(fp);

ファイルからのデータの読込み 例題

ソースファイル名:player2.c

データをファイルから読み込み,変数に格納, 表示

#include <stdio.h> #define NUM 100 int main(void) { FILE *fp; char team[NUM][256]; char name[NUM][256]; int hr[NUM]; int i; fp = fopen("player.txt","r"); /* ファイルから選手データを読込み */ for(i=0; i < 5; i++){

fscanf(fp, "%s %s %d", team[i], name[i], &hr[i]); }

for(i=0; i < 5; i++){

/* 読み込んだデータを画面表示 */

printf( "%s¥t%s¥t%d¥n", team[i], name[i], hr[i]); } fclose(fp); return(0); } 読込みモードで ファイルをオープン

(7)

プログラミング入門2 13

入出力ファイル名の指定

これまでのプログラム

入出力ファイル名をプログラム中で指定

ファイル名の指定

fp = fopen("player.txt","r");

キーボードからファイル名を指定できれば便利!

char filename[256];

printf(“input filename : ”);

scanf( “%s”, filename );

fp = fopen(

filename

, “r” );

ソースファイル名:filename.c

ファイル名を指定して開く

入出力ファイル名の指定 例題

#include <stdio.h> int main(void) { FILE *fp;

char filename[256];

printf( "Input file name : " );

scanf( "%s", filename );

ファイル名格納用変数

キーボードから入力した文字列を filenameに格納

(8)

プログラミング入門2 15

ファイルが開けるかどうかのチェック

fopen関数 の仕様

ファイルが開けるかどうかの判定

fp = fopen(filename, "r");

fpにそのファイルを指定するファイルポインタを格納

(fpには,そのファイルを指定可能にするための何らかの値が入る)

ファイル”filename”が存在し,開ける場合

fpにはNULL(空)が代入される

ファイル”filename”が存在しない,開けない場合

fp = fopen(filename, “r”)

== NULL

== それ以外の値

if文を使って判定

ファイルが開けるかどうかのチェック 例題

ソースファイル名: filecheck.c

指定したファイルが開けるかどうかを判定

#include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; char filename[256];

printf( "Input file name : " ); scanf( "%s", filename );

if( (fp = fopen(filename, "r") ) == NULL ){

printf("指定したファイル%sは開けません¥n", filename); printf("プログラムを終了します¥n");

exit(1); }

else{

printf( "file open成功!¥n" );

printf( "ファイル名は%sです", filename ); ヘッダーを追加(exit関数使用のため) フ ァ イ ル が 開 け る か ど う か の 判 fp=NULL, ファイルが開けなかった場合 プログラムを終了 fp != NULL : ファイルが開けた場合

(9)

プログラミング入門2 17

演習課題

以下のようなサッカー選手のデータファイルをエディタ(emacs)で作成せよ。そ

のファイルから,選手名,アシスト数,ゴール数を読み込み,アシスト王,得

点王,MVP(アシスト+得点がMAX)の選手を判定し,画面に結果を表示

するプログラムを作成せよ。

(kadai8.c)

選手数は各自で決めて良い

最大値を求める関数を自分で設計し、使用すること

Takahara 7 20

Nakayama 5 13

Magron 2 8

Kazu 6 10

・・・・・・・

・・・・・・・

名前 アシスト ゴール

ファイル:player.txt

今日は1問のみ.前回までの課題チェックを今日中に終えること!!

【重要】中間テストについて

日時:11月24日(月)13:00~14:00

テスト終了後に、ホームルーム実施

場所:3401教室

試験範囲

最初~第6回(関数)まで

(10)

プログラミング入門2 19

前回演習問題,課題についての注意事項

演算の優先順位について

配列の要素数について

naiseki = x1*x2 + y1*y2;

p1 = sqrt(x1*x1+y1*y1);

p2 = sqrt(x2*x2+y2*y2);

radian = acos(naiseki/

(p1*p2)

);

radian = acos(naiseki/p1*p2);

2 1

* p

p

naiseki

2 1

* p

p

naiseki

()を使って計算の 優先順位を決める

int

num

;

char name[

num

][128];

printf(“人数を入力してください:”);

scanf(“%d”, &num);

配列の要素数に変数は使用できない。

定数のみ使用可能

(直接数字を書くか,#defineで定数を定義するか)

重要

※必要なサイズの配列を動的に確保することも可能 alloc, malloc関数 コンパイルエラー

参照

関連したドキュメント

IDLE 、 STOP1 、 STOP2 モードを解除可能な割り込みは、 INTIF を経由し INTIF 内の割り. 込み制御レジスター A で制御され CPU へ通知されます。

また、JR東日本パス (本券) を駅の指定席券売機に

目標 目標/ 目標 目標 / / /指標( 指標( 指標(KPI 指標( KPI KPI KPI)、実施スケジュール )、実施スケジュール )、実施スケジュール )、実施スケジュールの の の の設定

操作内容/項目説明 振込金額を入力します。 【留意点】 ・半角数字(最大10桁)

土木工事では混合廃棄物の削減に取り組み、「安定型のみ」「管理型

該当お船積みの Invoice company のみが閲覧可能と なります。Booking 時に Invoice company をご指定くだ さい。ご指定ない場合は、自動的に Booking Party =

市内15校を福祉協力校に指定し、児童・生徒を対象として、ボランティア活動や福祉活動を

a事業所 新規指定⇒ 指定 ※(2年度) 指定 ※(3年度) 特定. b事業所 新規指定⇒ 指定 指定