「C言語/ファイル入出力」の版間の差分
削除された内容 追加された内容
typo |
プロパティ lang=c を lang="C" に更新。 |
||
2 行
まず、ファイルを作成したり読み書きしたりするための関数を使うには、
<code><stdio.h></code>をインクルードしないといけな
下記のような書式になる。
<
#include <stdio.h>
20 行
return 0;
}
</syntaxhighlight>
ファイルに読み書きなどの操作するためには、まず、そのファイルをオープン(開く)する必要がある。
46 行
その場合、使用を許可するために、下記のように<code>#pragma warning(disable:4996)</code>を下記のような位置に加える。
<
// Windowsでfopenが使えない場合
66 行
return 0;
}
</syntaxhighlight>
<code>#pragma warning(disable:4996)</code> が、fopenなどの関数の使用許可の命令である。これは、stdafx など一連のWindows用ヘッダのインクルードの後で宣言する必要がある。
72 行
実際にWindows用のコードを書くと、下記のようになる。
<
// Windows用のファイル操作のコード例
#include "stdafx.h"
96 行
return 0;
}
</syntaxhighlight>
121 行
ソースファイルのあるフォルダの場所は、Windowsの場合、標準設定では
:\ユーザー名\
のアドレスのフォルダにある。
VisualStudio 2019 をインストールしたとき、既に
138 行
なお、windowsの設定では、ある設定の場合では <code>fopen</code> と同様に <code>fprintf</code> が初期状態では使えない場合があるので、
<
#pragma warning(disable:4996)
</syntaxhighlight>
で宣言しておく必要の生じる場合もある。
146 行
インクルードすべきヘッダについては、標準出力のヘッダにあるので、
<
#include <stdio.h>
</syntaxhighlight>
でインクルードすれば充分である。
169 行
何か変数をファイルに書き込みたい場合、たとえば整数型の変数だとして、変数名が「hensuu」なら、それを書き込むには、あらかじめソースコードで
<
int hensuu;
</syntaxhighlight>
のように、どこかで宣言しておく。
178 行
そのあと、プログラムがコード内でのファイル書き込み実行場所にて
<
fprintf(fp1, "%d \n", hensuu);
</syntaxhighlight>
のようなコードを実行するように、ソースコードを記述すればいい。
192 行
;コード例
<
#include "stdafx.h"
#include <stdio.h>
229 行
return 0;
}
</syntaxhighlight>
このようにして、ファイルへの出力が出来る。
267 行
コード例を示す。
<
#include "stdafx.h"
#include <stdio.h>
305 行
return 0;
}
</syntaxhighlight>
325 行
2行目以降も読み取りたい場合には、その行数だけ、下記のように繰り返しfscanfを使う必要がある。
<
#include "stdafx.h"
369 行
return 0;
}
</syntaxhighlight>
407 行
fgetsのほうは
<
#include <stdio.h>
#include <stdlib.h> // 「続行するには何かキーを押してください . . .」を表示するのに必要。
446 行
}
</syntaxhighlight>
474 行
いっぽう、fscanf のほうは
<
#include <stdio.h>
#include <stdlib.h> // 「続行するには何かキーを押してください . . .」を表示するのに必要。
514 行
}
</syntaxhighlight>
;実行結果
573 行
(Fedora30 で確認)
<
#include <stdio.h>
#include <stdlib.h> // 「続行するには何かキーを押してください . . .」を表示するのに必要。
612 行
return 0;
}
</syntaxhighlight>
648 行
書式は
<
strtok(分解する文字列のある変数,"区切り文字にしたい文字")
</syntaxhighlight>
のようになる。
CSVファイルを読み込ませたいなら、区切り文字にしたいのはカンマ記号なので、
<
strtok(分解する文字列のある変数,",")
</syntaxhighlight>
となる。
なお、<code> strtok </code> の第一引数を「NULL」にすると、前の文字の続きから読み込む。つまり
<
strtok(NULL,"区切り文字にしたい文字")
</syntaxhighlight>
にすると、前の文字の続きから次ぎの区切り文字まで(その行に残りの区切り文字がない場合には行末まで)を読み込む。
670 行
(Fedora30 で確認)
<
#include <stdio.h>
#include <stdlib.h> // 「続行するには何かキーを押してください . . .」を表示するのに必要。
733 行
return 0;
}
</syntaxhighlight>
775 行
;コード例
<
#include <stdio.h>
#include <stdlib.h> // 「続行するには何かキーを押してください . . .」を表示するのに必要。
839 行
return 0;
}
</syntaxhighlight>
901 行
;コード例(まだ改造してない)
<
#include "stdafx.h"
#include <stdio.h>
940 行
return 0;
}
</syntaxhighlight>
949 行
;改造したコード例 (Visual Studio 2019 および Windows 7 で確認ずみ)
<
#include "stdafx.h"
#include <stdio.h>
987 行
return 0;
}
</syntaxhighlight>
------------
995 行
このエラーの起きるコードでは、if文の条件節にファイルポインタを使ったif文の中で、むりやりクローズしようとしています。
<
fp1 = fopen("test1.txt", "r");
if ((fp1 = fopen("test1.txt", "r")) == NULL) {
1,004 行
return 1;
}
</syntaxhighlight>
1,026 行
たとえば、次のコードは、読み取り対象のファイル"SettingFile.txt"の無い場合には、実行時にエラーになります
<
// Linuxでエラーになる例
#include <stdio.h>
1,056 行
}
}
</syntaxhighlight>
1,062 行
(Fedora 31 で確認ずみ)
<
// Linuxでエラーにならない例
#include <stdio.h>
1,092 行
}
}
</syntaxhighlight>
もし、読み取り対象のファイルの無い場合に、
1,122 行
Windowsなら、たとえば、次のようなコードで実装できます。
<
FILE* fp1;
{
1,135 行
fclose(fp1);
}
</syntaxhighlight>
ここで重要なのは、 <code> fopen </code> で開いた回数は、上記のコードでは2箇所あるのに(if文の条件の記述での <code> fopen </code> は除く)、実際に開かれるファイル名は1個(例の場合ならテキストファイル "SettingFile.txt" の1個だけ)であるという事です。
1,159 行
;コード (Fedora 31 で確認ずみ)
<
// Linux用
#include <stdio.h>
1,189 行
}
}
</syntaxhighlight>
1,246 行
;コード例 (Fedora30 で確認ずみ)
<
#include <stdio.h>
#include <stdlib.h> // 「続行するには何かキーを押してください . . .」を表示するのに必要。
1,304 行
return 0;
}
</syntaxhighlight>
実行結果
1,381 行
テキストファイルの文字コードはUTF-8である。Fedoraの標準の文字コードのままである。テキストエディタにはGedit(ジーエディット)を用いている。GeditはFedora28で標準に付属してくるテキストエディタである。
<
#include <stdio.h>
1,417 行
return 0;
}
</syntaxhighlight>
1,456 行
;Linuxの場合のコード例
<
#include <locale.h>
#include <wchar.h>
1,491 行
return 0;
}
</syntaxhighlight>
1,527 行
例えば、下記のようなコードを書いても、日本語の文字は、文字化けしてしまう。
<
// 文字化けしてしまう。
// Windowsを想定
1,573 行
}
</syntaxhighlight>
|