文字列の置き換え

[戻る]
チャイ 2008/07/08(火) 19:58:46
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"のようにファイル名の途中に%が
あっても対応できるようにと考えているのですが、
色々想定してるうちにコードが煩雑になってしまいます。

どなたか良い方法をご存知でしたらご教授を宜しくお願いします。

たいちう 2008/07/08(火) 20:29:26
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)

もし判らないところがあれば、再度その部分を聞いてください。

チャイ 2008/07/08(火) 20:40:16
たいちうさん
早速の返事ありがとうございます。

質問なのですが、
(3)のformatの指定で、桁数がその都度変わる場合
%04sの04を、05とか06とかに動的に変えられないのでは
と思ったのですが、この辺りはどうでしょうか?

たいちう 2008/07/09(水) 00:10:23
すみません、うっかりしてました。

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

チャイ 2008/07/09(水) 11:12:55
[[解決]]
桁数が可変する場合、*を使うんですね!!

試して見たところうまく動作しました。
今回の質問では、%か何かで数字を括ったら勝手にインクリメント
してくれるような都合のいいAPIがあるのでは、と思って質問したのですが、
さすがにそれはなさそうですね、、、

よく考えたら、この桁数が可変する場合の処理で苦戦してたので
無事に解決としたいと思います。

たいちうさん有難うございました!!!!

古いスレッドには追加発言できません。