C言語 空白で区切られたファイルの読み込み - stdio.h - [ fscanf ]
2008.09.19 Friday | by LRESULT
ファイル読み込みの続き。
fgetc()や、fgets()は、テキストファイルをそのまま文字として読み込んでいました。
今回は、書式が決まっているfscanf()を見てみます。
文字だけでなく、整数や小数を数値として読み込む事が出来ます。
意外とコレが曲者で・・
※ CSVファイルの読み込みは、こちら。
書式 | int fscanf( FILE *fp, const char *format, ... ) |
---|---|
機能 | 書式付き(空白やカンマ区切り)ファイルを読み込む |
引数 | FILE *fp : ファイル(ストリーム)ポインタ const char *format : 書式文字列 ... : 可変個引数。書式で指定された変数をカンマ区切りで指定 |
戻り値 | 成功すると、読み込んだ項目数を返し、 失敗すると、EOF(-1)を返します。 |
まずは、空白で区切られた「space.txt」を読み込んで表示してみます。 「space.txt」の中身は以下のように空白で区切る形になっており、 文字列 整数 整数 小数 小数 という書式で書かれています。 これを、fscanf()にそのまま当てはめます。 test01 10 11 1.0 1.1 test02 20 21 2.0 2.1 test03 30 31 3.0 3.1 |
---|
#include <stdio.h> int main(void) { FILE *fp; char *fname = "space.txt"; char s[100]; int ret, n1, n2; float f1, f2; fp = fopen( fname, "r" ); if( fp == NULL ){ printf( "%sファイルが開けません¥n", fname ); return -1; } while( ( ret = fscanf( fp, "%s %d %d %f %f", s, &n1, &n2, &f1, &f2 ) ) != EOF ){ printf( "%s %d %d %f %f¥n", s, n1, n2, f1, f2 ); } fclose( fp ); return 0; } |
test01 10 11 1.0 1.1 test02 20 21 2.0 2.1 test03 30 31 3.0 3.1 |
---|
と、表示されます。 まずは上手く空白で区切って読み込む事が出来ました 文字列 整数 整数 小数 小数の箇所をそのままfscanf()に当てはめ "%s %d %d %f %f" と、しています。 |