WinXP VC2005 MFC を使用してます。
C:\MyFolder\test%0000%.txt
のようなファイル名を指定して、実際には
C:\MyFolder\test0001.txt
C:\MyFolder\test0002.txt
C:\MyFolder\test0003.txt
:
C:\MyFolder\test9999.txt
のように%で括った数字列をインクリメントしながら
順次ファイルを保存する処理を考えています。
処理はできるだけ柔軟にと思い、桁数とか、
abc%0000%defのようにファイル名の途中に%が
あっても対応できるようにと考えているのですが、
色々想定してるうちにコードが煩雑になってしまいます。
どなたか良い方法をご存知でしたらご教授を宜しくお願いします。
char *template = C:\MyFolder\test%0000%.txt
とおいて、簡単にアルゴリズムだけ説明。
(1) templateに'%'が2つ含まれているはずなので、両方の場所を探す。
(2) 2つの'%'の間は全て0のはずなので、その個数を数える。
(3) templateの'%0000%'(0の数は(2)で数えたもの)を
%04s(4は(2)で数えた0の個数)で置換して、formatとする。
(4) sprintf(buf, format, number)
もし判らないところがあれば、再度その部分を聞いてください。
たいちうさん
早速の返事ありがとうございます。
質問なのですが、
(3)のformatの指定で、桁数がその都度変わる場合
%04sの04を、05とか06とかに動的に変えられないのでは
と思ったのですが、この辺りはどうでしょうか?
すみません、うっかりしてました。
int width = 4, number = 1;
printf(C:\\MyFolder\\test%0*d.txt\n, width, number);
詳しくは、こちらをどうぞ。
http://msdn.microsoft.com/ja-jp/library/25366k66(VS.80).aspx
桁数が可変する場合、*を使うんですね!!
試して見たところうまく動作しました。
今回の質問では、%か何かで数字を括ったら勝手にインクリメント
してくれるような都合のいいAPIがあるのでは、と思って質問したのですが、
さすがにそれはなさそうですね、、、
よく考えたら、この桁数が可変する場合の処理で苦戦してたので
無事に解決としたいと思います。
たいちうさん有難うございました!!!!