Jest ktos w stanie wytlumaczyc w jaki sposób napisać program by w pliku wyszukal
<tekst>mam problem </tekst>...... i wypisal w drugim pliku "mam problem" ?
string fnd="mam problem",content;
ifstream ifs("pliku.txt");
ofstream ofs("drugim_pliku.txt");
getline(ifs,content,'\0');
if(content.find(fnd)!=string::npos) ofs<<fnd;
Nie działa to za bardzo..chciałbym, żeby jak znajdzie <tekst> skopiował to co jest za nim aż napotka </tekst>, a on tego nie robi..
Dostałeś przykład odczytu, zapisu i wyszukiwania.
Jeżeli nie umiesz z tego złożyć tego czego potrzebujesz to zapraszam na PW zawsze chętnie wykonam zlecenie.
Za pomocą std::string.find()
odszukujesz w tekście znacznik <tekst> i </tekst>, zapisujesz ich pozycję i wyciągasz wartość z pomiędzy ich za pomocą std::string.substr()
Można to zrobić np. tak:
std::string tekst = "To jest jakis tekst <tekst>szukany tekst</tekst> i tu tez jakis tekst";
std::string znalezione = tekst.substr(tekst.find("<tekst>") + 7, tekst.find("</tekst>") - tekst.find("<tekst>") - 1);
Sorry jeżeli będą jakieś błędy, piszę z telefonu.
Najprościej można stworzyć 2 zmienne typu string . Do 1 zmiennej ładujesz zawartość pliku a do 2 znaki tylko pomiędzy <tekst></tekst>.
Np.
string line; //zmienna zawierająca zawartość pliku
string line2; //zmienna zawierająca znaki tylko miedzy <tekst></tekst>.
for(int i=0; i<line.length(); ++i) {
if(line[i]=='>') {
int j=i+1; line2='\0';
while(line[j]!='<') {
line2+=line[j];
j++;
}
//tutaj zapis do 2 pliku np : nazwa_strumienia<<line2<<endl;
i=j+6;
}
}
Jeżeli są jakieś błędy to skorygujcie (szybko pisałem)
Ten kod oczywiście zapisuje dane pomiędzy kilkoma takimi znacznikami <tekst></tekst>