呼び出されたときに、パラメータに一致するテキストファイルを検索し、ファイルを上書きして「更新」する関数を作成しようとしています。
これが私の現在の機能です:
編集:これは新しい更新されたコードですが、まだ機能していません:/
UpdateGemに送信する行は次のとおりです(例:sTempTxt: "AB:5.55")
ostringstream stream;
stream << std::setprecision(3) << fEindgem;
string sTempTxt = sVak + ":" + stream.str() + "\n";
UpdateGem(sTempTxt);
void UpdateGem(string text)
{
ifstream f;
f.open("GEM.txt");
string sGEMS[100];
string temp[3];
splitstring(text, ":", temp[0], temp[1]);
bool OverWrite;
int count = 0;
string Delete, line;
while(true)
{
getline(f, sGEMS[count], '\n');
if(f.eof()) break;
splitstring(sGEMS[count], ":", temp[1], temp[2]);
if (temp[0] == temp[1])
{
OverWrite = 1;
Delete = sGEMS[count];
}
count++;
}
// Don't set count to 0, since we need it
// count = 0;
ofstream f2;
f2.open("GEM2.txt"/*,std::ios_base::app*/);
if (OverWrite)
{
f.seekg(0, std::ios::beg);
for (int i = 0; i < count; ++i)
{
if (sGEMS[i] != Delete) f2 << sGEMS[i];
}
}
f.close();
f2.close();
remove("GEM.txt");
rename("GEM2.txt", "GEM.txt");
ofstream file;
file.open("GEM.txt",std::ios_base::app);
file << text;
file.close();
}
置き換える必要のある行はNAME:NUMBERの形式であり、番号は異なる可能性があるため、splitstring関数を使用して名前を見つかった行の名前と比較し、その行を完全に消去して「更新」します。後で再度追加してください。ただし、現在のコードは更新された行のみをファイルに書き込み、古い行は書き込みません...