質問: c言語のプログラム中に使うsystem()関数に変数を使う場合 c言語のプログラム中に使うsystem()関数に変数を使う場合 system("sort < a.txt |uniq >aa.txt"); という関数を使うと テキストファイル a.txt は編集(sort,uniqにより)され aa.txt となるのですが このファイル名を変数として扱いたいので char str[255]; for(z=0; z<255; z++){ sprintf(str,"sort < %d.txt |uniq >0%d.txt", z, z); system(str); } という形にすると 0.txt → 00.txt 1.txt → 01.txt と255.txtまで編集されると思ったのですが 編集後のファイルが白紙で現れてしまいます。 system("sort < a.txt |uniq >aa.txt"); のファイル名に変数を扱い 複数のファイルの編集をするためには どのようなプログラムを作成すると良いのでしょうか? ご回答よろしくお願いいたします。
回答: たとえば 0.txt ファイルが 111 000 222 555 000 444 222 000 更に 1.txtファイルが 123 012 234 567 012 456 234 012 とするとき、次のプログラムを実行し、作成された 00.txt ならびに 01.txt を確認してみてください。 なお、エラーチェックはしていないので、付加してください。 /* source file: s310.c compile: gcc s310.c execution: ./a.out txt 2 ファイル名 txt およびファイル数 2 は、環境に応じて変更のこと。 */ #include #include int main(int argc, char *argv[]) { int z, n; char str[255], *c; n = atoi(argv[--argc]); c = argv[--argc]; for(z = 0; z < n; z++) { sprintf(str, "sort -u <%d.%s >%02d.%s\n", z, c, z, c); // printf(str); system(str); } return 0; }