Prog1_12th

Similar documents
2006年10月5日(木)実施

Prog1_15th

ファイル入出力

ファイル入出力

Prog2_10th

Taro-ファイル処理(公開版).jtd

Microsoft PowerPoint - 第3回目.ppt [互換モード]

Prog1_10th

情報処理演習 B8クラス

演算増幅器

gengo1-12

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

Microsoft Word - Cプログラミング演習(9)

Microsoft PowerPoint - 14th.ppt [互換モード]

gengo1-12

gengo1-12

Prog1_6th

PowerPoint Presentation

Prog1_11th

Prog1_6th

C言語講座 ~ファイル入出力編~

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

PowerPoint Presentation

memo

Microsoft PowerPoint - kougi6.ppt

計算機プログラミング

PowerPoint プレゼンテーション

slide4.pptx

02: 変数と標準入出力

※ ポイント ※

DVIOUT

プログラミング基礎

Taro-リストⅠ(公開版).jtd

Microsoft PowerPoint - prog04.ppt

02: 変数と標準入出力

PowerPoint プレゼンテーション

Microsoft Word - Cプログラミング演習(10)

プログラミング演習3 - Cプログラミング -

プログラミング演習3 - Cプログラミング -

Cプログラミング1(再) 第2回

Microsoft PowerPoint - kougi2.ppt

Microsoft PowerPoint - prog06.ppt

プログラミング基礎

Microsoft PowerPoint pptx

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint - 11.pptx

プログラミング実習I

Prog1_15th

Prog1_2nd

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

文字列 2 前回の授業ではコンピュータ内部での文字の取り扱い 文字型の変数 文字型変数への代入方法などを学習した 今回は 前回に引き続き 文字処理を学習する 内容は 標準入出力 ( キーボード ディスプレイ ) での文字処理 文字のファイル処理 文字を取り扱うライブラリ関数である 標準入出力 Lin

Microsoft PowerPoint - kougi4.ppt

memo

ポインタ変数

スライド タイトルなし

slide5.pptx

Prog1_10th

PowerPoint プレゼンテーション

Microsoft PowerPoint - kougi11.ppt

Prog1_3rd

Microsoft Word - Training10_プリプロセッサ.docx

Microsoft Word - no15.docx

1. ファイルにアクセスするには ファイルにアクセスするには 1. ファイルを開く 2. アクセスする 3. ファイルを閉じるという手順を踏まなければなりません 1.1. ファイルを読み込む まずはファイルの内容を画面に表示させるプログラムを作りましょう 開始 FILE *fp char fname

Microsoft PowerPoint - 12.ppt [互換モード]

Microsoft PowerPoint - kougi9.ppt

プログラミング基礎

PowerPoint プレゼンテーション

Microsoft PowerPoint - 13.ppt [互換モード]

memo

Microsoft PowerPoint - kougi8.ppt

Microsoft Word - cpro_m_13.doc

Microsoft Word - Cプログラミング演習(12)

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

C言語入門

02: 変数と標準入出力

PowerPoint プレゼンテーション

Microsoft Word - no204.docx

Prog2_9th

Microsoft Word - 06

PowerPoint プレゼンテーション

練習&演習問題

Microsoft PowerPoint - CproNt11.ppt [互換モード]

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

PowerPoint プレゼンテーション

全体ロードマップ インターネット電話 音の符号化 ( 信号処理 ) 今日 音の録音 再生 ネットワーク ( ソケット ) プログラミング ファイル入出力 インターネットの基礎 C プログラミング基礎

Microsoft PowerPoint - 10Com2.ppt

プログラミング演習 土曜日(Q組)

第1回 プログラミング演習3 センサーアプリケーション

ポインタ変数

講習No.12

Microsoft PowerPoint - 計算機言語 第7回.ppt

Taro-ポインタ変数Ⅰ(公開版).j

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

ポインタ変数

ゲームエンジンの構成要素

Microsoft PowerPoint - prog07.ppt

memo

格子点データの解析 1 月平均全球客観解析データの解析 客観解析データや衛星観測データのような格子点データは バイナリ形式のデータファイルに記録されていることが多いです バイナリ形式のデータファイルは テキスト形式の場合とは異なり 直接中身を見ることができません プログラムを書いてデータを読み出して

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

Microsoft PowerPoint - lec10.ppt

Transcription:

2013 年 7 月 4 日 ( 木 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお, ファイルに階層構造を持たせて, ファイルはレコードの集合体, レコードはデータの集合体とする場合がある JIS( 日本工業規格 ) 用語でのファイルの定義は, このような階層構造に基づいている レコードとは, 様々な種類のデータ項目を一まとめにしたもので, 例えば, 住所録に於ける 1 人分のデータ ( 郵便番号, 住所, 氏名, 電話番号等 ) がこれに当たる C 言語では, レコードに相当するデータ構造を構造体によって表現する 同種のデータを一まとめにした配列では, データ型は 1 種類で共通であるが, 構造体の各項目 ( メンバ ) はそれぞれ別のデータ型となり得る 構造体に関する詳細は, 次々回の教材で解説する ファイル操作 C 言語でファイル操作を行う際には, 高水準入出力関数と呼ばれるライブラリ関数が利用できる 高水準入出力関数は OS に依存せずにファイルの読み書きを行えるもので, その中では低水準入出力関数と呼ばれる OS のシステムコールを利用するハードウェアよりのものを利用している また, 高水準入出力関数では, ファイルを直接操作せず, バッファと呼ばれる一時記憶装置を介して, ファイルの読み書きを行う このようなファイルへのアクセスをストリームと呼ぶ ここでは,C 言語で高水準入出力関数を用いたファイル操作を扱う ファイル操作の一連の流れは次のようになる 1) ストリームを開く ( 読み込み, 書き出し, 追加等のオープンモードを指定する ) 2) ストリームからの入力, ストリームへの出力 3) ストリームを閉じるなお, ストリームを開く関数 fopen はストリームを制御する変数へのポインタを返すが, これをファイルポインタの初期値として設定し, それ以降はファイルポインタを用いる 入出力 ( 読み込み, 書き出し ) は標準入出力の場合と同様,CPU 側から見た方向である 例 )FILE *fp = fopen("gakusei_data.txt","r"); ここで,FILE はストリームを制御するための情報を記録する変数の型であり, 通常は構造体として stdio.h 中で定義される そのメンバには, ファイル位置指示子やバッファへのポインタ等が含まれる fopen のオープンモードの 1 文字目には, 次の 3 種類のうちいずれかを指定する - 1 -

1) r 読み込み (read) モードファイルが存在しないか, 読み込めなければ, 失敗 2) w 書き出し (write) モードファイルを新規に作成するか, 既存のファイルがあれば, 内容を廃棄し, 長さ 0に切り詰めて開く 3) a 追加 (append) モード既存のファイルを追加書き出し用に開くか, ファイルを新規に作成する fopen のオープンモードの 2 文字目または 3 文字目には, 次の文字が指定可能である 両者を組み合わせることも可能である 1) b バイナリ (binary) モードバイナリファイルとして開く 2) + 更新モード上述の r,w,a でストリームを開く際の扱いは引き継ぎ, 読み込み, 書き出し共に可能とする 例題 1( ファイルからのデータの読み込み ) 次のソースプログラムをテキストエディタで入力して,prog12-1.c の名前を付けて保存する それを翻訳 編集して実行形式のファイルを作成し, 実行せよ なお, 実行する前に,1 個の整数値を書き込んだ "in.txt" を, プログラムと同じディレクトリに作成しておく必要がある /* prog12-1.c */ int main(void) FILE *fin; if (NULL == (fin = fopen("in.txt","r"))) printf(" ファイルが開けません \n"); fscanf(fin, "%d", &i); printf(" ファイルから読み込まれた整数値は %d です \n", i); fclose(fin); 解説 1.fopen がストリームを開くことに失敗した場合には,NULL を返す - 2 -

2.fin = fopen("in.txt","r") という式の値は,fopen が返して fin に代入された値となる 3.fscanf は, 第 1 引数に指定されたストリームからの入力を, 入力書式文字列に基づいて後 に続く変数に格納する 例題 2( ファイルへのデータの書き出し ) 次のソースプログラムをテキストエディタで入力して,prog12-2.c の名前を付けて保存する それを翻訳 編集して実行形式のファイルを作成し, 実行せよ また, 出来上がった "out.txt" の内容を確認する /* prog12-2.c */ int main(void) FILE *fout; printf(" 整数値を入力してください :"); /* 標準入力ストリームから整数値を読み込む */ if (fscanf(stdin, " %d", &i) == 1) printf(" 標準入力から読み込まれた整数値は %d です \n", i); else fprintf(stderr, " 標準入力からの整数値の読み込みエラーです \n"); if (NULL == (fout = fopen("out.txt","w"))) printf(" ファイルが開けません \n"); fprintf(fout,"i=%d\n",i); fclose(fout); 解説 1.fscanf は代入された入力項目数を返す ( 入力文字と書式とが一致しない場合は小さくなることがあり,0にもなり得る) また, 入力失敗の際には EOFマクロの値 ( 負の整数 ) を返す ここでは, 正常に 1 個の変数にデータの格納が行われた場合には 1が返されることを利用して - 3 -

いる 2.fscanf の入力書式文字列で "%d" の様に %d の前に空白が置かれているのは, ホワイトスペースを読み飛ばす ( 空白や改行を誤って入れても, その後に数値を入力できるようにする ) ためのものである 3.stdinは標準入力ストリームを表し,stderrは標準エラー出力ストリームを表す 例題 3( ファイルへのデータの追加 ) 次のソースプログラムをテキストエディタで入力して,prog12-3.c の名前を付けて保存する それを翻訳 編集して実行形式のファイルを作成し, 実行せよ なお, 実行時には, プログラム第 1 引数にファイル名を指定して, prog12-3 out.txt と入力する out.txt 以外のファイル名を指定した場合には, 最初の実行時にファイルが新規に作成される 実行後に,"out.txt" の内容を確認する /* prog12-3.c */ int main(int argc,char *argv[]) FILE *fio; if (argc!= 2) printf(" 利用法 :prog12-3 ファイル名 \n"); if (NULL == (fio = fopen(argv[1],"a"))) printf(" ファイルが開けません \n"); printf(" 整数値を入力してください :"); if (fscanf(stdin, " %d", &i) == 1) printf(" 標準入力から読み込まれた整数値は %d です \n", i); fprintf(fio,"i=%d\n",i); else fprintf(stderr, " 標準入力からの整数値の読み込みエラーです \n"); fclose(fio); - 4 -

演習 1 10 個の整数データが各行に記述された入力用のファイル "input.txt" を開き, そこから読み込んだデータをソートした結果を, 出力用のファイル "output.txt" を開いて書き込むプログラムを考える この空欄 1),2),3),4) を埋めてソースプログラムを完成させ, テキストエディタで入力して,ex12-1.cの名前を付けて保存する それを翻訳 編集して実行形式のファイルを作成し, 実行せよ なお,"input.txt" は教材としてダウンロードしたものを用いる /* ex12-1.c */ #define MAXDATA 10 void swap(int *, int *); void sort(int [], int); int main(void) int point[maxdata]; FILE *1), *2) ; if (NULL == (fin = fopen("3) ","r"))) printf(" 入力ファイルが開けません \n"); for (i=0; i<maxdata; i++) fscanf(fin,"%d",&point[i]); fclose(fin); printf(" データをソート中 \n"); sort(point, MAXDATA); if (NULL == (fout = fopen("4) ","w"))) printf(" 出力ファイルが開けません \n"); for (i=0; i<maxdata; i++) fprintf(fout,"%2d:%4d\n",i+1,point[i]); fclose(fout); - 5 -

void swap(int *x, int *y) int temp=*x; *x=*y; *y=temp; void sort(int data[], int n) int k=n-1; while (k>=0) int i, j; for (i=1, j=-1; i<=k; i++) if (data[i-1]<data[i]) j=i-1; swap(&data[i], &data[j]); k=j; 提出物 : 1) 例題 1 の出力結果をコピーして貼り付けたテキストファイル res12.txt 2) テキストファイル in.txt 3) テキストファイル out.txt 4) テキストファイル output.txt 5) 演習 1 のソースプログラムのファイル ex12-1.cの完成版 - 6 -