Problem ze splitem(?)

0

Cześć. Mam problem z kodem. Zadaniem jest wyświetlić drużyny, w tym wczytaną z pliku i zapisać wszystkie drużyny do plików. Problem występuje po pętli while w mainie, sama ona się wykonuje, lecz niestety nic za nią już nie. Myślę, że powodem może być split przy odczytywaniu pliku, jednak nie za bardzo wiem jak ten problem rozwiązać. Zawodnicy w pliku txt oddzieleni są średnikami, jeden pod drugim (inna konfiguracja również nie działa). Czy ktoś mógłby mnie dokładniej nakierować w czym problem? Poniżej udostępniam kod

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <fstream>
#include <ctime>


using namespace std;

class Player                                            //klasa Player, opisująca zawodnika
{
public:                                                 //publiczna

    Player(string name, string surname, int height, vector<string> skills); 
    Player(string);
    string line;
    string to_string();
    void change_height(int height);
    Player(const Player& source);
    vector<string> split(string line, char delimiter) //nazwy
    {
        vector<string>data;
        string character;
        stringstream charStream(line);
        while (getline(charStream, character, delimiter))
        {
            data.push_back(character);
        }
        name=data[0];
        surname=data[1];
        height=stoi(data[2]);
        for (int i=3; i<8; i++)
        {
            skills.push_back(data[i]);
        }
        return data;
    }

private:                                                //prywatna
    string name;
    string surname;
    int height;
    vector<string> skills;
};
Player::Player(string line) //konstuktor pliku
{
    this->line=line;
}

Player::Player(string name, string surname, int height, vector<string> skills)
{
    this->name=name;
    this->surname=surname;
    this->height=height;
    this->skills=skills;
};
Player::Player(const Player &source)                    //konstruktor kopiujący
{
    this->name=source.name;
    this->surname=source.surname;
    this->height=source.height;
    this->skills=source.skills;
};


void Player::change_height(int height)                  //zmiana wzrostu
{
    this->height=height;
};

string Player::to_string()                              //to_string
{
    stringstream s;
    s<< name << " "<<
        surname<<" "<<
        height<<" ";
        for(int i = 0; i<5; i++){
        s<<skills[i]<<" ";
        };
        cout<<" "<<endl;
    return s.str();
}

class Group                                             
{
public:      
    vector<Player*> players_c;
    vector<Player*>players;

    Group(vector<Player*>players)     //konstuktor                  
    {
        this->players=players;
    }

    Group(const Group&, vector<Player*> players_c)      //copy
    {
        this->players=players_c;
    }

    string show()
    {
        stringstream data;
        for(auto player: players)
        {
            data<<player->to_string();         
        }
        return data.str();
        
    }

    void write(string team_name)
    {
        time_t curr_time;
        curr_time = time(NULL);
        struct tm now;
        localtime(&curr_time);
        stringstream time;
        cout<<(now.tm_year + 1900)<<'-'
        <<(now.tm_mon + 1)<<'-'<<now.tm_mday<<endl
        <<now.tm_hour<<':'<<now.tm_min<<':'<<now.tm_sec<<endl;

        stringstream filename;
        filename<<"Team"<<"_"<<team_name<<"_"<<time.str()<<".txt"<<endl;
        ofstream file;
        file.open(filename.str());
        file<<show();
        file.close();
    }
};

int main()
{
    //Zawodnicy 1 druzyny:
    Player p1("Grzegorz", "Smolarz", 180, {"Podania", "wrzutki", "dosrodkowania", "strzaly z daleka", "rzuty karne"});
    Player p2("Tomasz", "Balon", 188, {"Podania prostopadle", "ruletka", "glowki", "strzaly z bliska", "rzuty rozne"});
    Player p3("Cezary", "Siwek", 170, {"Podania rownolegle", "loby", "rzuty rozne", "strzaly z daleka", "rzuty karne"});
    Player p4("Slawomir", "Motyl", 185, {"Sprint", "drybling", "dosrodkowania", "glowki", "rzuty karne"});
    Player p5(p1);
    //Zawodnicy 2 druzyny:
    Player p6("Filip", "Sierpien", 170, {"Loby", "wrzutki", "dosrodkowania", "wykonczenia", "podania"});
    Player p7("Slawomir", "Wrona", 180, {"Podania", "silne strzaly", "wytrzymalosc", "rzuty rozne", "rzuty wolne"});
    Player p8("Hubert", "Kolan", 190, {"Sprint", "wrzutki", "wykonczenia", "wslizgi", "rzuty rozne"});
    Player p9("Tomasz", "Pas", 199, {"Podania", "wrzutki", "sprint", "wykonczenia", "rzuty wolne"});
    Player p10("Zbigniew", "Nowak", 195, {"Sprint", "wrzutki", "przejecia", "dosrodkowania", "podania", "glowki"});

    vector<Player*> TeamOne={&p1,&p2,&p3,&p4,&p5};  //wektor 1 druzyny
    vector<Player*> TeamTwo={&p6,&p7,&p8,&p9,&p10}; //wektor 2 druzyny
    vector<Player*> TeamThree(TeamTwo);             //wektor 3 druzyny, kopii drugiej
    
    
    cout<<"Pierwsza druzyna: ";
    Group Darts(TeamOne);
    cout<<Darts.show();

    cout<<"Druga druzyna: ";
    Group Diablo(TeamTwo);
    cout<<Diablo.show();

    cout<<"Trzecia druzyna- kopia drugiej- zmiana wzrostu jednego z zawodnikow: ";
    p7.change_height(230);
    Group Drakensang(TeamThree);
    cout<<Drakensang.show();
    
    string filename;
    string line;

    string arr[5];
    int i=0;

    cout<<"Podaj nazwe pliku razem z rozszerzeniem: ";
    cin>>filename;
    ifstream file;
    
    file.open(filename);
    if (file.good())
    {
        cout<<"Taki plik istnieje"<<endl;
        while (getline(file, line))
        {
            arr[i]=line;
            i++;
            cout<<"test";
        }
        Player p11(arr[0]);
        p11.split(arr[0], ';');
        Player p12(arr[1]);
        p12.split(arr[1], ';');
        Player p13(arr[2]);
        p13.split(arr[2], ';');
        Player p14(arr[3]);
        p14.split(arr[3], ';');
        Player p15(arr[4]);
        p15.split(arr[4], ';');
        
        p11.change_height(100);

        vector<Player*> TeamFour = {&p11, &p12, &p13, &p14, &p15}; //wektor 4 druzyny, z pliku

        cout<<"Wyswietlanie wszystkich 4 druzyn: "<<endl;

        cout<<"Pierwsza druzyna: ";
        cout<<Darts.show();

        cout<<"Druga druzyna: ";
        cout<<Diablo.show();

        cout<<"Trzecia druzyna- kopia drugiej- zmiana wzrostu jednego z zawodnikow: ";
        cout<<Drakensang.show();

        cout<<"Czwarta druzyna- wczytana z pliku: ";
        Group ReadingTeam(TeamFour);
        ReadingTeam.show();

        Darts.write("Darts");
        Diablo.write("Diablo");
        Drakensang.write("Drakensang");
        }
        else 
        {
            cout<<"Nie ma takiego pliku";
        }
    file.close();
    
return 0; 
}
1

jednak nie za bardzo wiem jak ten problem rozwiązać

Debugerem. Kompilujesz w trybie debug, stawiasz break pointa w metodzie split i krok po kroku sprawdzasz jakie dane są ładowane i czy są takiej jakie się spodziewasz.

0

Już to naprawiłem. Musiałem wstawić średniki między stringami w pliku. Jednak wciąż nie zapisuje do plików

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