odczytywanie z pliku i zapis do innego
Ostatnio zmodyfikowano 2014-01-08 10:36
operation_argo Temat założony przez niniejszego użytkownika |
odczytywanie z pliku i zapis do innego » 2014-01-07 18:36:19 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" ? |
|
00Andre |
» 2014-01-08 01:02:04 Najlepiej było by wyczytać plik i wszystkie wyczytane linie wrzucać na koniec vectora. Potem pętlą w każdej lini wyszukać w stringu głównych wyrazów ( <tekst> i </tekst> ) np for( unsigned a = 0; a < linie_pliku.size(); a++ ) { size_t Szukanie1 = linie_pliku[ a ].find( "<tekst>" ); if( Szukanie1 != string::npos ) { size_t Szukanie2 = linie_pliku[ a ].find( "</tekst>" ); kontrol_2 = true; if( Szukanie2 != string::npos ) { linietekst.push_back( linie_pliku ); kontrol_1 = true; break; } else kontrol_1 = false; } else kontrol_2 = false;
A potem ta linijkę która zawiera nasze <tekst>masz problem</tekst> trzeba usunąć te całą resztę za pomocą funkcji tekst.erase(pozycja do usuwania, ilość znaków do usunięcia). Oczywiście jak usuniesz wszystko i zostanie sam "mam problem" to normalnie zapisujesz do innego pliku czy jak tam chcesz |
|
alixir |
» 2014-01-08 10:36:53 Można to też zrobić bezpośrednio przeszukując plik linia po linii i kopiować wszystko od znacznika <tekst> aż do napotkania znacznika </tekst> Tu przykładowy program: #include <string> #include <iostream> #include <fstream>
size_t szukaj( std::string & tekst, std::string szukanyWyraz ) { size_t poz = tekst.find( szukanyWyraz ); return poz; }
int main() { std::fstream plik1; std::fstream plik2; plik1.open( "plik1.txt", std::ios::in ); if( plik1.good() ) { while( !plik1.eof() ) { std::string linia; std::getline( plik1, linia ); std::string buf; size_t pozycja_pocz = szukaj( linia, "<tekst>" ); if( pozycja_pocz != std::string::npos ) { pozycja_pocz += 7; plik2.open( "plik2.txt", std::ios::out ); if( plik2.good() ) { size_t pozycja_kon = szukaj( linia, "</tekst>" ); while( pozycja_kon == std::string::npos ) { buf = ""; buf.insert( 0, linia, pozycja_pocz, linia.length() - pozycja_pocz ); plik2 << buf << "\n"; pozycja_pocz = 0; std::getline( plik1, linia ); pozycja_kon = szukaj( linia, "</tekst>" ); } buf = ""; buf.insert( 0, linia, pozycja_pocz, pozycja_kon - pozycja_pocz ); plik2 << buf << "\n"; plik2.close(); } else { std::cout << "Nie udalo sie otworzyc pliku do zapisu!" << std::endl; return 1; } } } plik1.close(); } else { std::cout << "Nie udalo sie otworzyc pliku do odczytu!" << std::endl; return 1; } return 0; }
|
|
« 1 » |