Wyszukiwanie frazy w pliku tekstowym i wyświetlanie 6 kolejnych lini pliku po znalezionej frazie
Ostatnio zmodyfikowano 2014-01-14 07:35
alixir |
» 2014-01-10 08:59:43 Po 1. Niepoprawne wywonie funkcji w "case 4" void szukajWszystkichFraz(); (słówko void zbędne) Po 2. Funkcja przyjmuje jako parameter szukaną frazę, którą powinieneś podać Po 3. W takim razie z funkcji powinien zniknąć kod odpowiedzialny za pobieranie frazy i powinien być on przeniesiony do "case 4" Po 4. Warunek sprawdzający znaleznienie frazy : if( tekst.find( szukanaFraza ) != std::string::npos ) Po 5. Warunek końca pętli szukającej : } while( !plik_dane.eof() ); Po 6. Warunek końca pętli głównej : } while( koniec != 0 ); Po 7. Ja bym użył biblioteki string a nie string.h (ale może to bez znaczenia) Po 8. Menu powinno znaleźć się w pętli głównej, gdyż po dowolnej akcji nie widać dostępnych opcji. |
|
hooligans1293 Temat założony przez niniejszego użytkownika |
» 2014-01-13 21:22:24 Poprawiłem funkcje wyszukującą i wszystko działa ok chciałbym teraz zmodyfikować ją w taki sposób aby przy podaniu roku wyświetlała 2 poprzednie linie(tytuł i czas), linie z rokiem i potem numer katalogowy i szerokość i wysokość klatki. Próbowałem zmienić wartości w pętli na -2 zamiast zera i na 5 zamiast 7 ale to nic nie zmienia. Ma ktoś jakieś pomysł aby to zrobić ? Mój kod wygląda teraz następująco: #include <iostream> #include <conio.h> #include <math.h> #include <time.h> #include <cstdlib> #include <string.h> #include <stdio.h> #include <fstream>
using namespace std;
fstream plik_dane;
struct dvdinfo { char tytul[ 50 ]; float czastrwania; float rokwyd; char nrkatalog[ 20 ]; int szeklatki; int wsklatki; };
void szukajWszystkichFraz( string szukanaFraza ) { ifstream plik_dane; plik_dane.open( "dvd_data.txt", ios::in ); string tekst; do { getline( plik_dane, tekst ); if( tekst.find( szukanaFraza ) != std::string::npos ) { for( int i = 0; i < 7; i++ ) { cout << "\t" << tekst << endl; getline( plik_dane, tekst ); } return; } } while( !plik_dane.eof() ); plik_dane.close(); } int main( int argc, char ** argv ) { cout << "\t**********************************************" << endl; cout << "\t*************** Baza plyt DVD ****************" << endl; cout << "\t**********************************************" << endl << endl; int wybor; int n, koniec; koniec = 1; string szukane, podane; start: cout << "--------------------------------------------------------------" << endl << endl;; cout << "\t*** MENU *** " << endl << endl; cout << "===> (1) Dodaj nowa plyte do bazy" << endl; cout << "===> (2) Usun plyte z bazy" << endl; cout << "===> (3) Sortowanie bazy" << endl; cout << "===> (4) Wyszukiwanie plyty w bazie" << endl; cout << "===> (5) Zamknij program" << endl << endl; cout << endl; do { cout << "Wprowadz symbol operacji ktora chcesz wykonac " << endl << endl; cout << "===> "; cin >> wybor; cout << "--------------------------------------------------------------" << endl << endl; if( wybor > 5 ) { cout << "\t------------------------------------" << endl; cout << "\t-- Symbol operacji niepoprawny --" << endl; cout << "\t------------------------------------" << endl << endl; cout << "\t------------------------------------" << endl; cout << "\t--Wprowadz ponownie symbol operacji--" << endl; cout << "\t------------------------------------" << endl << endl; } else switch( wybor ) { case 1: cout << "Wybrales dodawanie plyt" << endl << endl << endl; cout << "--------------------------------------------------------------" << endl << endl; dvdinfo newdvd; cout << "Podaj tytul plyty " << endl; cout << "===>"; cin >> newdvd.tytul; cout << endl; cout << "Podaj czas trwania filmu w minutach " << endl; cout << "===>"; cin >> newdvd.czastrwania; cout << endl; cout << "Podaj rok wydania plyty " << endl; cout << "===>"; cin >> newdvd.rokwyd; cout << endl; cout << "Podaj numer katalogowy plyty **" << endl << endl; cout << "**(numer katalogowy to pierwsze 3 znaki tytulu, rok wydania i czas trwania" << endl; cout << " w postaci xxx-xxxx-xxx np. tit-1999-234)" << endl; cout << "===>"; cin >> newdvd.nrkatalog; cout << endl; cout << "Podaj szerokosc klatki " << endl; cout << "===>"; cin >> newdvd.szeklatki; cout << endl; cout << "Podaj wysokosc klatki " << endl; cout << "===>"; cin >> newdvd.wsklatki; system( "cls" ); cout << "-------------------------------------------------------------------------------" << endl; cout << "\t <<<< Dodales plyte >>>>" << endl; cout << "\t| Tytul :: " << newdvd.tytul << endl; cout << "\t| Czas trwania :: " << newdvd.czastrwania << " min" << endl; cout << "\t| Rok wydania :: " << newdvd.rokwyd << endl; cout << "\t| Numer katalogowy :: " << newdvd.nrkatalog << endl; cout << "\t| Rozmiar klatki :: " << newdvd.szeklatki << " x " << newdvd.wsklatki << endl; plik_dane.open( "dvd_data.txt", ios::app | ios::ate ); if( plik_dane.good() == true ) { ofstream plik_dane; plik_dane.open( "dvd_data.txt", ios::app | ios::ate | ios::out ); plik_dane << newdvd.tytul << "\r\n"; plik_dane << newdvd.czastrwania << "\r\n"; plik_dane << newdvd.rokwyd << "\r\n"; plik_dane << newdvd.nrkatalog << "\r\n"; plik_dane << newdvd.szeklatki << "\r\n"; plik_dane << newdvd.wsklatki << "\r\n"; plik_dane << "\r\n"; plik_dane.close(); } else cout << "Blad odczytu pliku!" << endl; goto start; break; case 2: cout << "Wybrales usuwanie plyt" << endl; cout << "--------------------------------------------------------------" << endl << endl; break; case 3: cout << "Wybrales sortowanie plyt" << endl; cout << "--------------------------------------------------------------" << endl << endl; break; case 4: cout << "Wybrales wyszukiwanie plyt" << endl; cout << "--------------------------------------------------------------" << endl << endl; cout << "Podaj Tytul do wyszukania" << endl; cin >> podane; system( "cls" ); cout << "--------------------------------------------------------------" << endl; cout << "===> Wyszukujesz pliku zawierajacego " << podane << " w tytule" << endl; cout << "--------------------------------------------------------------" << endl << endl; cout << "\tZnalezione filmy to: " << endl << endl; szukajWszystkichFraz( podane ); goto start; break; case 5: system( "cls" ); cout << endl; cout << "\t----------------------------------------------------------" << endl; cout << "\t----- Aby zakonczyc dzialanie programu nacisnij ENTER----- " << endl; cout << "\t----------------------------------------------------------" << endl << endl; koniec = 0; break; } } while( koniec != 0 ); return 0; }
|
|
alixir |
» 2014-01-14 07:35:02 Nowy problem zmienia nieco postać rzeczy. W tym celu musiałbyś napisać nową/e funkcje. Jedna z funkcji wyszukiwałaby w pliku nr linii z podaną datą i zwracała ją jako wynik. Druga funkcja przyjmowałaby w/w nr linii jako argument i wyświetlała 6 linii poczynając od (nr_linii - 2)
|
|
1 « 2 » |