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

Podstawy obsługi plików - Zadanie domowe

Ostatnio zmodyfikowano 2014-08-16 21:20
Autor Wiadomość
Daedra
Temat założony przez niniejszego użytkownika
Podstawy obsługi plików - Zadanie domowe
» 2014-08-16 01:21:35
C/C++
//Napisz program, który odczyta zawartość pliku, a następnie wypisze na ekranie tylko te wiersze, w których znajduje się wyraz wprowadzony przez użytkownika.
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

bool szukaj( string Tekst, string szukanaFraza )
{
    cout << "test" << endl;
    size_t znalezionaPozycja = Tekst.find( szukanaFraza );
    if( znalezionaPozycja == string::npos )
         return false;
    else
         return true;
   
}

bool wczytanie_pliku( string & chcia_plik )
{
    ifstream plik;
    plik.open( chcia_plik.c_str() );
    if( !plik.good() )
    {
        return false;
    }
   
    string tekst;
    while( getline( plik, tekst ) )
    {
        cout << tekst << endl;
    }
    cout << endl;
   
    cout << "Jesli chcesz wyszukac fraze w tekscie podaj 'T', jesli nie, podaj 'N'" << endl;
    string podana;
    cin >> podana;
    cin.clear();
    cin.sync();
    if( podana == "T" )
    {
        cout << "Podaj fraze ktora chcesz wyszukac:\n";
        string a;
        getline( cin, a );
        while( std::getline( plik, tekst ) )
        {
            if( szukaj( tekst, a ) )
            {
                cout << tekst << endl;
            }
            else continue;
           
        }
    }
   
    plik.close();
    return true;
}


int main()
{
    do {
        cout << "Podaj nazwe pliku tekstowego ktory chcesz wczytac. Przykl.: 'x.txt' itp." << endl;
        cout << "Napisz 'end' jesli chcesz zakonczyc dzialanie programu." << endl;
        string chciany_plik;
        cin >> chciany_plik;
        cin.clear();
        cin.sync();
        string end = "end";
        if( chciany_plik == end )
        {
            return false;
        }
        cout << endl;
       
        if( !wczytanie_pliku( chciany_plik ) )
        {
            cout << "Nie znaleziono" << endl;
        }
    } while( true );
   
}
Mój problem polega na tym, że gdy podaję frazę tekstu to nie zostaje wyszukana, program po prostu wraca do głównej funkcji i wykonuje pętlę od nowa:

Podaj nazwe pliku tekstowego ktory chcesz wczytac. Przykl.: 'x.txt' itp.
Napisz 'end' jesli chcesz zakonczyc dzialanie programu.
x.txt

To jest pierwsza linijka tekstu
To juz jest druga linijka tekstu
A zas ta linijka bedzie trzecia linijka tekstu
Oczywiscie ta jest czwarta, chyba tyle wystarczy

Jesli chcesz wyszukac fraze w tekscie podaj 'T', jesli nie, podaj 'N'
T
Podaj fraze ktora chcesz wyszukac:
To
Podaj nazwe pliku tekstowego ktory chcesz wczytac. Przykl.: 'x.txt' itp.
Napisz 'end' jesli chcesz zakonczyc dzialanie programu.
end

Process returned 0 (0x0)   execution time : 17.930 s
Press any key to continue.


Ktoś wie co robię źle?
P-115555
Jacob99
» 2014-08-16 10:51:11
Nigdzie nie zapisujesz wyszukanych pozycji.
P-115559
Daedra
Temat założony przez niniejszego użytkownika
» 2014-08-16 20:05:20
Mógłbym prosić o dokładniejsze wskazanie błędu? Nadal nie mogę sobie z tym poradzić, nie wiem jak mogę zapisać wyszukaną pozycję. Aby ją zapisać muszę wejść w ogóle do funkcji
bool szukaj( string Tekst, string szukanaFraza )
, a właśnie ona sprawia mi głównym problem, na dowód czy funkcja jest w ogóle uruchamiana zamieściłem w niej couta, mowa o
cout << "test" << endl;
 Nie rozumiem czemu się to nie wyświetla...
P-115588
Jacob99
» 2014-08-16 20:27:55
Trochę poprawiony kod:
C/C++
//Napisz program, który odczyta zawartość pliku, a następnie wypisze na ekranie tylko te wiersze, w których znajduje się wyraz wprowadzony przez użytkownika.
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;

size_t szukaj( string Tekst, string szukanaFraza )
{
    cout << "test" << endl;
    size_t znalezionaPozycja = Tekst.find( szukanaFraza );
    if( znalezionaPozycja == string::npos )
         return - 1;
    else
         return znalezionaPozycja;
   
}

bool wczytanie_pliku( string & chcia_plik )
{
    ifstream plik;
    plik.open( chcia_plik.c_str() );
    if( !plik.good() )
    {
        return EXIT_FAILURE;
    }
   
    string tekst;
    while( getline( plik, tekst ) )
    {
        cout << tekst << endl;
    }
    cout << endl;
   
    cout << "Jesli chcesz wyszukac fraze w tekscie podaj 'T', jesli nie, podaj 'N'" << endl;
    string podana;
    cin >> podana;
    cin.clear();
    cin.sync();
    if( podana == "T" )
    {
        cout << "Podaj fraze ktora chcesz wyszukac:\n";
        string a;
        getline( cin, a );
        size_t pozycja = 0;
        while( getline( plik, tekst ) )
        {
            pozycja = szukaj( tekst, a );
        }
        if( pozycja == - 1 )
             cout << "Nie znaleziono.!!!!" << endl;
        else
             cout << "Fraze " << a << " znaleziono na pozycji: " << pozycja << endl;
       
    }
   
    plik.close();
    return true;
}


int main()
{
    do
    {
        cout << "Podaj nazwe pliku tekstowego ktory chcesz wczytac. Przykl.: 'x.txt' itp." << endl;
        cout << "Napisz 'end' jesli chcesz zakonczyc dzialanie programu." << endl;
        string chciany_plik;
        cin >> chciany_plik;
        string end = "end";
        if( chciany_plik == end )
        {
            return EXIT_SUCCESS;
        }
        cout << endl;
       
        if( !wczytanie_pliku( chciany_plik ) )
        {
            cout << "Nie znaleziono" << endl;
        }
    }
    while( true );
   
}
Porównaj ze swoim i popoprawiaj jeszcze, żeby wykrywał dokładne pozycje itd. ...
P-115589
Daedra
Temat założony przez niniejszego użytkownika
» 2014-08-16 21:20:15
Edit:
Problem nadal nierozwiązany.

Edit2:
Ktoś jest w stanie wyjaśnić czemu nie pojawia mi się
cout << "test" << endl;
 występujące w funkcji "bool szukaj()"?
I w jaki sposób mam dokładniej wykrywać pozycje?
P-115590
« 1 »
  Strona 1 z 1