Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wyszukiwanie frazy w pliku tekstowym i wyświetlanie 6 kolejnych lini pliku po znalezionej frazie

Ostatnio zmodyfikowano 2014-01-14 07:35
Autor Wiadomość
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.
P-101730
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:
C/C++
#include <iostream>
#include <conio.h>
#include <math.h>
#include <time.h>
#include <cstdlib>
#include <string.h>
#include <stdio.h>
#include <fstream> // biblioteka do obslugi plikow


using namespace std;

fstream plik_dane; //wprowadzenie klasy fstream do obsługi pliku

//-----------// deklaracja struktury -----------------------------------------------------------------------------------------------------

struct dvdinfo //glowna struktura
{
    char tytul[ 50 ]; //tytul plyty
    float czastrwania; // czas trwania w min
    float rokwyd; //rok wydania
    char nrkatalog[ 20 ]; // numer katalogowy litery i cyfry
    int szeklatki; // szerokosc klatki np 1920
    int wsklatki; // wysokosc klatki np 1080
};
//prototypy funkcji------------------------------------------------------------------------------

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; //zmienna sterujaca menu
    int n, koniec; //n- liczba okreslonych wskaznikow, koniec - zmienna konczaca petle
    koniec = 1;
    string szukane, podane; //zmienne do wyszukiwania
   
   
    start: //etykieta do funkcji goto umożliwiajaca powót do menu wyboru po zakonczonej operacji
   
    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 //petla do while służąca do zamykania programu
    {
       
        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 ) // instrukcja wyboru
        {
        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" ); //czyszczenia ekranu konsoli
           
            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 ); //otwarcie pliku do odczytu i zapisu na jego koncu
           
           
            if( plik_dane.good() == true ) //sprawdzanie czy udało sie otworzyć  plik z danymi
            {
                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"; //każda struktura zajmuje 7 lini ( do odczyt bloku--- numer bloku *7lini
                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; //powrot do poczatku programu
            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;
}
    
P-102119
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) 
P-102134
1 « 2 »
Poprzednia strona Strona 2 z 2