スライド 1

情報処理演習C2
ファイル操作について
(2)
ファイル操作 (1)
temp.txt
FILE* fp = fopen("temp.txt","r");
int value0;
fscanf(fp,"%d\n",&value0);
int values[4];
fscanf(fp,"%d, %d, %d, %d\n",&values[0],&
values[1],&values[2],&values[3]);
char buf0[1024];
fgets(buf0,sizeof(buf0),fp);
char buf1[1024];
fgets(buf1,sizeof(buf1),fp);
fclose(fp);
1
2, 3, 4, 5
L3
L4
value0
values[4]
1?
2?
3?
4?
5?
buf0[1024]
?L
?
3?
\n
?
\0
?
?
?
・・・
4?
\n
?
\0
?
?
?
・・・
buf1[1024]
?L
?
ファイル操作 (2)
temp.txt
FILE* fp = fopen("temp.txt","r");
1
2, 3, 4, 5
L3
L4
char buf[1024];
while(NULL!=fgets(buf,sizeof(buf),fp)){
printf("buf=%s",buf);
}
fclose(fp);
buf[1024]
1?L
2
\n
?,
\0
3?
4
\n
?,
\0
4?
?,
5?
・・・
ファイルの操作 (3)
• 一度ファイルの最後まで読み込んだ後で、も
う一度ファイルを最初から読み直すには?
– fcloseしてから、もう一度fopenする。
– ファイルから読み込んだ情報を、配列に保存して
おく。
関数の基本
• 変数に値を入れるもの
– int ret = function(1,2);
• 自分で関数を作る場合と、予め用意された関
数を使う場合がある。
文字列処理関数: strncmp
• 指定した数の文字を比較する。
• int ret = strncmp("abc","abc",3);
– retに0が代入される。
• int ret = strncmp("abc","abcd",3);
– retに0が代入される。
• int ret = strncmp("abc","abcd",4);
– retに-1が代入される。
• int ret = strncmp("abd","abc",3);
– retに1が代入される。
文字列処理関数: strstr
• 文字列の中から、指定された文字列を捜す。
• char* ptr = strstr("abc","a");
– ptrに"a"の部分を指すポインタが代入される。
• char* ptr = strstr("abc","bc");
– ptrに"bc"の"b"の部分を指すポインタが代入される.
• char* ptr = strstr("abc","d");
– ptrにNULLが代入される。
文字列処理: sscanf
• 主に文字列を数値に変換する。
• int ivalue1,ivalue2;
• int ret = sscanf("5","%d",&ivalue1);
– retに1が代入される。ivalue1に5が代入される。
• int ret = sscanf("5,6","%d,%d",&ivalue1,&ivalue2);
– retに2が代入される。ivalue1、ivalue2に5,6が代入される。
• int ret = sscanf("abc","%d",&ivalue1);
– retに0が代入される。ivalue1には何も入らない。
文字列処理の例
• char* ptr = strstr("str,1,name",",");
– ptrに"str"の後ろの,のポインタが入る。
– ptrは、",1,name" という文字列ともいえる。
– ptr+1は、"1,name"という文字列になる。
• int ivalue;
• int ret = sscanf(ptr+1,"%d",&ivalue);
– ivalueに1が入る。