「C言語/ファイル入出力」の版間の差分

削除された内容 追加された内容
応用例 メモのあるファイルの数値の読取
746 行
 
上記のように、たしかに、読み取った文字列を分解している。
 
 
== 応用例 ==
=== メモのあるファイルの数値の読取 ===
 
たとえば
<pre>
途中までの計算結果: 41
</pre>
(ファイル名は totyuu.txt としよう。)
 
のような解説文「途中までの計算結果」のような文字列のあるテキストファイルから、数値の「41」だけを読取たい場合があるだろう。
 
 
このようなファイルの読取り方は、さきほど紹介した strtok や fgets などを応用するのが良い。
 
また、文字列型を整数型に変換するには <code> atoi </code> という関数を使います。
 
なお、浮動型の数に変換するには <code> atof </code> という関数になります。
 
 
とりあえず、コード例として、読み取ったファイルに数 1 を足すだけの簡単なプログラムを作ってみましょう。
 
 
;コード例 (Fedora30 で確認ずみ)
 
<source lang=c>#include <stdio.h>
#include <stdlib.h> // 「続行するには何かキーを押してください . . .」を表示するのに必要。
#include <string.h>
 
int main()
{
FILE *fp1;
 
fp1 = fopen("totyuu.txt", "r");
if ( (fp1 = fopen("totyuu.txt", "r") ) == NULL) { // ここを読み取りモード"r"にするのを忘れないように
printf("ファイルを開けませんでした。\n");
//system("pause");// 「続行するには何かキーを押してください . . .」の待機命令
return 1;
}
else{
printf("ファイルをオープンしました。\n");
}
 
char buffer1[150];
printf("文字列を読み取っています。\n");
fgets(buffer1,150,fp1);
 
printf("1行目の文字列\n");
printf("%s", buffer1);
 
 
char str1[150];
char str2[150];
 
strncpy(str1, strtok(buffer1,":") ,150); // str1 = strtok(buffer1,","); では代入できない。
strncpy(str2, strtok(NULL,":") ,150);
 
printf("str1として読み取った文字列\n");
printf("%s", str1);
printf("\n");
 
printf("str2として読み取った文字列\n");
printf("%s", str2);
 
 
printf("中断してた計算の続きを開始します。\n");
 
int henkan = atoi(str2);
int keisan = henkan + 1;
 
 
printf("%d に 1 を足すと %d です。\n", henkan, keisan );
 
 
fclose(fp1);
printf("ファイルをクローズしました。\n");
return 0;
}
</source>
 
実行結果
<pre>
ファイルをオープンしました。
文字列を読み取っています。
1行目の文字列
途中までの計算結果: 41
str1として読み取った文字列
途中までの計算結果
str2として読み取った文字列
41
中断してた計算の続きを開始します。
41 に 1 を足すと 42 です。
ファイルをクローズしました。
</pre>
 
 
== 文字コード ==