Próbuję napisać funkcję, która zwracała by liczbę występowania słowa w pliku tekstowym, jednocześnie uzupełniała przez referencję wektor informacji o pozycji występowania danego słowa. Do funkcji przesyłam informacje o nazwie pliku(nazwa_pliku-string), szukanym słowie(AType-string) i vector(tablica_AType...no trafiona nazwa jak na wektor).
Szukam słowa. Ta część funkcji przez metodę find zlicza występowanie słowa.
#1
Przy read_line(string-do pobierania) i pozycja(informacja z .find)
while( getline( plik, read_line ) )
{
plik.clear();
pozycja = read_line.find( AType );
if( pozycja != std::string::npos )
{
tablica_AType.push_back(( plik.tellg() - 2 ) -( read_line.size() ) +( pozycja ) );
ile_razy++;
}
tu otrzymuję tragiczne warrningsy spowodowane jak się domyślam przeprowadzeniu +/- operacji na różnych typach zmiennych z nawiasu po push_back. Czy jest jakaś forma zapisu tego działania bez przepisywania/rzutowania?(nie wiem czy dobrze użyte słowo w tym kontekście) danych z plik.tellg(), string.siz(), pozycja(size_t?). Vector jest <int> w deklaracji. Mimo tych warningów działa... no ale wolałbym czysty rezultat kompilacji.
#2
Problem zaczyna się w wydrukiem i sprawdzaniem na piechotę o co kaman...
tablica_AType.push_back(( plik.tellg() - 2 ) -( read_line.size() ) +( pozycja ) );
Od plik.tellg() odejmuję 2, że niby załapał "\n" przy wczytywaniu przez getline.
Tak te trafy zapisuje do vectora że to tak pi razy oko powinno być raz -2 raz -5 raz -1 żeby było poprawnie :).
Nie wiem czy jest to spowodowane formatowaniem w pliku tekstowym czy gdzieś zaczynam błądzić.
Czy jest jakiś kruczek/czki w posługiwaniu się tellg()? poza plik.clear() żeby wymazywać błędy?
#3-dwa w jednym
Nie mogę sobie poradzić z wypisywaniem na ekran fragmentu tekstu od "znalezionej pozycji występowania szukanego wyrazu".
#3a- wynik wyszukania pozycji jest mało powiedzieć niewłaściwy, wręcz przypadkowy.
#3b- nie wiem jak pobrać z pliku od podanej pozycji fragment tekstu zaczynający się szukanym słowem+5znaków za nim..
plik.open( nazwa_pliku.c_str() );
plik.seekg( 0 );
for( unsigned i = 0; i < tablica_AType10.size(); i++ )
{
plik.seekg( tablica_AType10[ i ], ios::beg );
for( unsigned ifg = 0; ifg <= szukany_text.size() + 5; ifg++ )
{
wydruk =( plik.get() );
}
cout << "linia: " << i + 1 << " " << endl << wydruk << "...(...)" << endl << "---------------------------" << endl;
plik.clear();
}
wydruk raz robiłem string raz char wydruk[szukany_wyraz.size()+5];//5-na fragment za wyrazem.
#4- problem z konsolą... jeżeli liczba wyświetleń cout <<""<<endl przekroczy jakąś tam magiczną barierę mogę obejrzeć wydruki tylko do jakiegoś momentu...do połowy np. poradziłem sobie z tym pisząc w pętli while taki monitor/log tego co wykonuje programik, gdzie mogę sobie na piechotę z kalkulatorem analizować wyniki poszczególnych przejść pętli...
Nie chcę zaśmiecać bardziej wklejaniem całości.(Jeżeli ktoś będzie chciał odpalić, program generuje plik "log.txt"!(no zamiast niekompletnego wydruku z konsoli..)_:/