演習の授業でつまづいたところをまとめた。
C++でファイルを通した入出力
出力ファイル名に変数を含む時のコード例(fprintfを利用する方法)
先にディレクトリでdata
を作っておく必要がある。
ファイルへの出力はdata/filexxx.dat
(xxx
には3桁でゼロ埋めをする)ときを考える。
using namespace std;
int main(){
int n = 100;
// def of name of file(s)
char filename[20] = "data/file";
char extension[5] = ".dat";
char filepath[25];
for(int i = 1; i <= n; i++){
sprintf(filepath, "%s%03d%s", filename, i, extension);
// make file(s)
FILE *file = fopen(filepath, "w");
// output to file(s)
fprintf(file, "hogehoge \n");
fprintf(file, "03%d\n", i);
// close file(s)
fclose(file);
}
return 0;
}
これを実行すると,data/file001.dat
からdata/file100.dat
までの100ファイルが生成されて,その中には,たとえばdata/filexxx.dat
には
hogehoge
xxx
と記入されて出力されている。
出力ファイル名に変数を含む時のコード例(ofstreamを利用する方法)
上のコードでfor
文の内部を以下のように書き換えると同じ出力を得ることができる。
for(int i = 1; i <= n; i++){
sprintf(filepath, "%s%03d%s", filename, i, extension);
ofstream ofs;
ofs.open(filepath);
// output to file(s)
ofs << "hogehoge" << endl;
ofs << setfill('0') << right << setw(3) << i << endl;
ofs.close();
}
Gnuplotで線分を表示する方法
plot "-"
0.0, 0.0
1.0, 1.5
e
とすると(0, 0)
と(1, 1.5)
を結ぶ線分が出力される
pngを統合してgifを作る方法
> convert $(ls *.png | sort -V) out.gif
(注) ls
でpngファイルを探して,sort
を行い,順番通りに並べる。それをconvert
に渡してout.gif
を作っている。
(参)convert
を使うと,WARNING: The convert command is deprecated in IMv7, use "magick"
という表示が出てくるので,
> magick $(ls *.png | sort -V) out.gif
とした方がいいかもしれない