2006年10月5日(木)実施

Similar documents
Prog1_12th

ファイル入出力

ファイル入出力

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

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

Prog1_15th

gengo1-12

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

演算増幅器

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

gengo1-12

情報処理演習 B8クラス

gengo1-12

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

Prog2_10th

PowerPoint Presentation

Prog1_6th

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

Prog1_11th

Prog1_10th

memo

Prog1_6th

Microsoft PowerPoint - prog04.ppt

計算機プログラミング

slide4.pptx

Microsoft PowerPoint - kougi6.ppt

PowerPoint プレゼンテーション

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

PowerPoint Presentation

プログラミング基礎

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

※ ポイント ※

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

02: 変数と標準入出力

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

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

DVIOUT

PowerPoint プレゼンテーション

02: 変数と標準入出力

Microsoft PowerPoint - kougi2.ppt

Microsoft PowerPoint pptx

memo

Microsoft PowerPoint - kougi4.ppt

Microsoft PowerPoint - prog06.ppt

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

PowerPoint プレゼンテーション

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

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint - 11.pptx

slide5.pptx

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

Microsoft PowerPoint - kougi9.ppt

プログラミング基礎

スライド タイトルなし

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

Microsoft PowerPoint - kougi11.ppt

ポインタ変数

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

memo

PowerPoint プレゼンテーション

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

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

C言語入門

PowerPoint プレゼンテーション

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

Prog1_2nd

Microsoft PowerPoint - kougi8.ppt

プログラミング実習I

PowerPoint プレゼンテーション

Microsoft Word - no15.docx

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

Microsoft Word - cpro_m_13.doc

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

Microsoft Word - no204.docx

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

02: 変数と標準入出力

Prog1_15th

ポインタ変数

PowerPoint プレゼンテーション

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

講習No.12

練習&演習問題

プログラミング基礎

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

Prog1_3rd

Microsoft PowerPoint pptx

V

< F2D837C E95CF CF68A4A94C5816A2E6A>

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

Microsoft Word - 06

memo

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

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

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

Prog1_10th

データ構造

ポインタ変数

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

Microsoft PowerPoint - 10Com2.ppt

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

Transcription:

2010 年 7 月 2 日 ( 金 ) 実施 ファイル処理ファイルとはファイル (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 ソースプログラム名は prog11-1.c とする なお, 実行する前に,1 個の整数値を書き込んだ "in.txt" を, プログラムと同じディレクトリに作成しておくこと /* prog11-1.c */ FILE *fin; if (NULL == (fin = fopen("in.txt","r"))) fscanf(fin, "%d", &i); printf(" ファイルから読み込まれた整数値は %d です \n", i); fclose(fin); 解説 1.fopen がストリームを開くことに失敗した場合には,NULL を返す 2.fin = fopen("in.txt","r") という式の値は,fopen が返して fin に代入された値となる 3.fscanf は, 第 1 引数に指定されたストリームからの入力を, 入力書式文字列に基づいて後に続く変数に格納する - 2 -

例題 2 ソースプログラム名は prog11-2.c とする /* prog11-2.c */ FILE *fout; printf(" 整数値を入力してください :"); /* 標準入力ストリームから整数値を読み込む */ if (fscanf(stdin, " %d", &i)) printf(" 標準入力から読み込まれた整数値は %d です \n", i); else fprintf(stderr, " 標準入力からの整数値の読み込みエラーです \n"); if (NULL == (fout = fopen("out.txt","w"))) fprintf(fout,"i=%d\n",i); fclose(fout); 解説 1.fscanf は代入された入力項目数を返す また, 入力失敗の際には EOF マクロの値 ( 負の整数 ) を返す 従って, 正常に変数への格納が行われた場合に if 文の条件式として真の扱いとなる 2.fscanf の入力書式文字列で," %d" の様に %d の前に空白が置かれているのは, ホワイトスペースを読み飛ばす ( 空白や改行を誤って入れても, その後に数値を入力できるようにする ) ためのものである 3.stdin は標準入力ストリームを表し,stderr は標準エラー出力ストリームを表す 例題 3 ソースプログラム名は prog11-3.c とする なお, 実行時には prog11-3 out.txt と入力する out.txt 以外のファイル名を指定した場合には, 最初の実行時にファイルが新規に作成される - 3 -

/* prog11-3.c */ int main(int argc,char *argv[]) FILE *fio; if (argc!= 2) printf(" 利用法 :prog11-3 ファイル名 \n"); if (NULL == (fio = fopen(argv[1],"a"))) printf(" 整数値を入力してください :"); if (fscanf(stdin, " %d", &i)) printf(" 標準入力から読み込まれた整数値は %d です \n", i); fprintf(fio,"i=%d\n",i); else fprintf(stderr, " 標準入力からの整数値の読み込みエラーです \n"); fclose(fio); 演習 1 10 個の整数データが各行に記述された入力用のファイル input.txt を開き, そこから読み込ん だデータをソートした結果を, 出力用のファイル output.txt を開いて書き込むプログラムを作成 した この空欄 1),2),3),4) を埋めて完成させ, 翻訳 編集して実行形式の ファイルを作成し, 実行せよ ここで, ソースプログラム名は ex11-1.c とする なお,input.txt は教材としてダウンロードしたものを用いる /* ex11-1.c */ #define MAXDATA 10 void swap(int *, int *); - 4 -

void sort(int [], int); 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); 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; - 5 -