program do analizy zapisu plikow txt

0

Witam, mam problem z wydobyciem calej struktury poprzez warunek (chcialbym - jezeli rasa=pies to cala "struktura" tj. imie,gatunek,rasa,wiek,kolor oraz takie same "inne struktury" zapisywały sie do pliku txt).
Mam podzielone na te "struktury" a chce miec dane zwierze w calosci (tj. imie,gatunek,rasa,wiek,kolor) pod zmienna zeby zapisac do pliku.
Dane wejsciowe wygladaj tak:

Fifi
pies
bezpanski
5
szarobury

Lolo
kot
syjamski
1
bialy

...itd
#include <iostream>
#include <fstream>
#include <string.h>
#include <cstdlib>

using namespace std;

struct zwierze{
    string imie;
    string gatunek;
    string rasa;
    string wiek;
    string kolor;
    string spacja="\n";
};
zwierze a[ 10 ];
string dane, wynik, imie1, gatunek1, rasa1, wiek1, kolor1;
int main()
{
    cout << "Podaj nazwę pliku wejściowego wraz z rozszerzeniem:" << endl;
    cin >> dane;

    //cout << "Podaj nazwę pliku wyjściowego wraz z rozszerzeniem:" << endl;
    //cin >> wynik;

    int liczba;
    cout << "Podaj numer kryterium wyboru zwierzecia (1=imie, 2=gatunek, 3=rasa, 4=wiek, 5=kolor):" << endl;
    cin >> liczba;

    if(liczba==1){
        cout << "Podaj jakim imieniem jesteś zainteresowany:" << endl;
        cin >> imie1;
    }
    if(liczba==2){
        cout << "Podaj jakim gatunkiem jesteś zainteresowany:" << endl;
        cin >> gatunek1;
    }
    if(liczba==3){
        cout << "Podaj jaka rasa cię interesuje:" << endl;
        cin >> rasa1;
    }
    if(liczba==4){
        cout << "Podaj ile ma mieć zwierzę lat (cyfra):" << endl;
        cin >> wiek1;
    }
    if(liczba==5){
        cout << "Podaj jakiego kolor ma być:" << endl;
        cin >> kolor1;
    }


    fstream plik ,plik2;
    plik.open( dane, ios::in );
    //plik2.open( wynik, ios::app );

    int k = 1;

    for( int i = 0; plik.eof() != 1; i )
    {
        if( k == 1 )
        {
            getline( plik, a[ i ].imie );
            cout << a[ i ].imie << endl;
        }
        if( k == 2 )
        {
            getline( plik, a[ i ].gatunek );
            cout << a[ i ].gatunek << endl;
        }
        if( k == 3 )
        {
            getline( plik, a[ i ].rasa );
            cout << a[ i ].rasa << endl;
        }
        if( k == 4 )
        {
            getline( plik, a[ i ].wiek );
            cout << a[ i ].wiek << endl;
        }
        if( k == 5 )
        {
            getline( plik, a[ i ].kolor );
            cout << a[ i ].kolor << endl;
        }
        if( k == 6 )
        {
            cout << endl;
            getline( plik, a[ i ].spacja );
            k = 0;
            i++;
        }
        k++;
    }

    cout << a[ 1 ].imie;         |
    cout << a[ 1 ].gatunek;      |
    cout << a[ 1 ].rasa;          > chce miec to jako calosc
    cout << a[ 1 ].wiek;         |
    cout << a[ 1 ].kolor;        |

    //plik2.close();
    plik.close();
}
0

dobra mam calosc a tak chj z tym..

string nr1, nr2;
    nr1= a[ 0 ].imie + "\n" + a[ 0 ].gatunek + "\n" + a[ 0 ].rasa + "\n" + a[ 0 ].wiek + "\n" + a[ 0 ].kolor + "\n";
    cout << nr1;

    nr2= a[ 1 ].imie + "\n" + a[ 1 ].gatunek + "\n" + a[ 1 ].rasa + "\n" + a[ 1 ].wiek + "\n" + a[ 1 ].kolor + "\n";
    cout << nr2;
0

Nie wiem czy dobrze zrozumiałem problem, ale jeśli tak, to mogę zaproponować rozwiązanie polegające na przeciążeniu operatora operator<<. Najlepiej będzie jak przeanalizujesz poniższy przykład:

#include <iostream>
#include <string>

struct Animal
{
    std::string name;
    std::string species;
    unsigned int age;
    //friend std::ostream& operator<<(std::ostream& s, const Animal& a);
};

std::ostream& operator<<(std::ostream& s, const Animal& a)
{
    s << "name: " << a.name << ", species: " << a.species;
    s << ", age: " << a.age;
    return s;
}

int main()
{
  Animal a{ "Kitty", "Cat", 5 };
  std::cout << "Hello, " << a << "\n";
}

Linijka z friend została wykomentowana, bo nie jest tu akurat potrzebna ale gdybyś miał składowe prywatne to już wtedy zachodziła by taka konieczność.

1 użytkowników online, w tym zalogowanych: 0, gości: 1