文字列の置き換え – プログラミング – Home

通知
すべてクリア

[解決済] 文字列の置き換え


チャイ
 チャイ
(@チャイ)
ゲスト
結合: 16年前
投稿: 24
Topic starter  

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のようにファイル名の途中に%が
あっても対応できるようにと考えているのですが、
色々想定してるうちにコードが煩雑になってしまいます。

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


引用未解決
トピックタグ
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

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)

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


返信引用
チャイ
 チャイ
(@チャイ)
ゲスト
結合: 16年前
投稿: 24
Topic starter  

たいちうさん
早速の返事ありがとうございます。

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


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

すみません、うっかりしてました。

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


返信引用
チャイ
 チャイ
(@チャイ)
ゲスト
結合: 16年前
投稿: 24
Topic starter  

桁数が可変する場合、*を使うんですね!!

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました