前提
C/C++でファイルの中身の値を取り出し、その後別の文字列に先ほど取得した値を使い置換するプログラムを作っています。
値の取り出しにはsscanf_s関数を使っているのですが、ループ2週目以降で値を取り出せていない気がします。
該当のソースコード
C++
1#include <iostream> 2#include <fstream> 3#include <sstream> 4using namespace std; 5 6 7int main(void) { 8 ifstream ifs("test.txt"); 9 string text, line; 10 while (getline(ifs, line)) { 11 text += line + "\n"; 12 } 13 14 while (true) { 15 16 double track0, track1; 17 int color; 18 19 int ret = sscanf_s(text.c_str(), "_name=アニメーション効果\ntrack0=%lf\ntrack1=%lf\nname=縁取り@YMM4\nparam=color=%x;", 20 &track0, &track1, &color); 21 22 if (ret == 0) { 23 break; 24 } 25 26 string tmp[3]; 27 stringstream ss; 28 ss << track0; 29 tmp[0] = ss.str(); 30 ss.str(""); 31 32 ss << track1; 33 tmp[1] = ss.str(); 34 ss.str(""); 35 36 ss << hex << uppercase << color; 37 tmp[2] = ss.str(); 38 ss.str(""); 39 40 string searchText = "_name=アニメーション効果\n" 41 "track0="+tmp[0]+"\n" 42 "track1="+tmp[1]+"\n" 43 "name=縁取り@YMM4\n" 44 "param=color=0x"+tmp[2]+";"; 45 46 string replaceText = "_name=アニメーション効果\n" 47 "track0="+tmp[0]+"\n" 48 "track1="+tmp[1]+"\n" 49 "track2=0.00\n" 50 "track3=100.00\n" 51 "check0=1\n" 52 "type=0\n" 53 "filter=0\n" 54 "name=縁取りT\n" 55 "param=local col1=0x"+tmp[2]+";local col2=0x0;local Lgr=0;local Mis=0;local MiV=25;local MiA=25;local mode=0;"; 56 57 text.replace(text.find(searchText), searchText.length(), replaceText); 58 59 } 60 61 return 0; 62}
test.txt
1_name=アニメーション効果 2track0=5.1 3track1=0.1 4name=縁取り@YMM4 5param=color=0xFF0000; 6 7_name=アニメーション効果 8track0=3.1 9track1=0.1 10name=縁取り@YMM4 11param=color=0xFFFFFF;
試したこと
1週目のループで
test.txt
1_name=アニメーション効果 2track0=5.1 3track1=0.1 4track2=0.00 5track3=100.00 6check0=1 7type=0 8filter=0 9name=縁取りT 10param=local col1=0xFF0000;local col2=0x0;local Lgr=0;local Mis=0;local MiV=25;local MiA=25;local mode=0; 11 12_name=アニメーション効果 13track0=3.1 14track1=0.1 15name=縁取り@YMM4 16param=color=0xFFFFFF; 17
までは行けたのですが、
2週目でsscanf_sが上手く行ってないのかと思います。
ただなぜ上手く行かないのかの理由が分かりません。
補足情報(FW/ツールのバージョンなど)
Visual Studio 2022
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/26 08:45