Tworzę mini programik do edycji plików tekstowych w których są zapisane wszystkie frazy tekstowe do innego programu. Napotkałem się na pewien błąd logiczny którego nie potrafię rozgryźć.
Mam funkcję która zapisuje tekst do tablicy do podanego przeze mnie momentu. Ten moment to miejsce gdzie zgadzają się 3 wartości: #txt# znak że tu się zaczyna nowa fraza, kategoria oraz numer frazy. Jeśli funkcja napotka taką konfiguracje, sprawdza kolejne pojedyncze wyrazy aż napotka #end# czyli znak końca frazy. Później zapisuje resztę pliku. I tak mam zapisany cały plik z wyjątkiem frazy której nie chcę. Funkcja podmienia całą zawartość pliku na tą zapisaną.
void Del (string plik, string kategoria, string numer) {
fstream file;
string tekst;
string tekst2;
string tekst3;
file.open(plik.c_str(), ios::in|ios::out|ios::binary);
vector <string> kontener;
if(!file.good()) {
OptionA(80,'n',"Nie udalo sie usunac frazy","Ok");
}
while(!file.fail()) {
file>>tekst;
if(tekst=="#txt#") {
file>>tekst2;
if(tekst2==kategoria) {
file>>tekst3;
if(tekst3==numer) {
string tekst4;
do{
file>>tekst4;
}while(tekst4!="#end#");
cout<<tekst4;
system("pause");
file>>tekst4;
cout<<tekst4;
system("pause");
} else {
kontener.push_back(tekst);
kontener.push_back(tekst2);
kontener.push_back(tekst3);
}
} else {
kontener.push_back(tekst);
kontener.push_back(tekst2);
}
} else {
kontener.push_back(tekst);
}
}
file.close();
file.open(plik.c_str(), ios::trunc|ios::out|ios::binary);
system("cls");
for(int i=0;i<kontener.size();i++) {
file<<kontener[i]<<" ";
}
system("pause");
file.close();
return;
}
Problem występuje w miejscu gdzie ma się zacząć zapisywanie tekstu po ominiętym fragmencie. W miejscu gdzie wszystko ma się zacząć od nowa wszystko się sypie funkcja przestaje działać jakby wpadła w niekończącą się pętle lub jeśli usuwam środkowy fragment zapisuje mi ostatnią frazę z pominiętego fragmentu czyli #end# co jest nie możliwe bo na początku pętli bierze kolejny wyraz...
Proszę o pomoc