Działania na plikach – potrzebuję pomocy z rozwiązaniem zadania

0

Pomoże ktoś rozwiązać to zadanie?

W kolejnych liniach pliku fizycznego
"pracownicy.txt" są zapisane następujące
dane:
imię nazwisko płeć wiek
gdzie płeć jest oznaczana literą M lub K.
Napisać program, który dla danego pliku utworzy
dwa, być może puste pliki fizyczne
"mezczyzni.txt" i "kobiety.txt"
zawierające w kolejnych liniach dane
nazwisko imię LDE
gdzie LDE oznacza liczbę lat do emerytury równą 65-
wiek dla mężczyzn i 60-wiek dla kobiet.
W przypadku błędu otwarcia któregoś z plików
program ma wyświetlić odpowiednie komunikaty

1

Pomoże ktoś rozwiązać to zadanie?

Co tu jest do rozwiazywania?
Odjąć wiek emerytalny od aktualnego?
Pomyśleć przy użyciu instrukcji warunkowej i prostej petli?
W czym mamy pomóc, bo nie zadałeś żadnego rozsądnego pytania?

0

Udało mi się napisać tyle, ale nie wiem co dalej


#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>

using namespace std;
int main()
{
    ifstream prac;
    prac.open("pracownicy.txt");
    if(!prac.is_open())
    {
        cout<<"Blad otwarcia pliku ";
        return 1;
    }

    ofstream plik1;
    plik1.open("mezczyzni.txt");
    if(plik1)
    {
        string nazwisko;
        string imie;
        int LDE;
        int age;
        LDE = 65- age;
        plik1<<nazwisko<<" "<<imie<<LDE;
    }
    else
    {
        cout<<"Blad otwarcia pliku. ";

    }
    ofstream plik2;
    plik2.open("kobiety.txt");
    if(plik2)
    {
        string nazwisko;
        string imie;
        int LDE;
        int age;
        LDE = 60- age;
        plik1<<nazwisko<<" "<<imie<<LDE;
    }
    else
     {
        cout<<"Blad otwarcia pliku. ";

    }
    return 0;
}

1
#include <fstream>
#include <iterator>
#include <string>

struct Person {
    std::string firstName;
    std::string lastName;
    bool male;
};

std::ostream& operator<<(std::ostream& out, const Person &p) {
    return out << p.firstName << ' ' << p.lastName << ' ' << (p.male ? 'M' : 'K');
}

std::istream& operator>>(std::istream& in, Person &p) {
    Person a;
    char ch;
    std::string dummy;
    if (std::getline(in >> a.firstName >> a.lastName >> ch, dummy)) {
         a.male = ch == 'M';
         p = a;
    }
    return in;
}

template<typename InputType, 
         typename FirstOutputType,
         typename SecondOutputType,
         typename PredicateType>
void splitData(
         InputType begin, InputType end, 
         FirstOutputType firstOutput,
         SecondOutputType secondOutput,
         PredicateType pred)
{
    for(; begin != end; ++begin) {
        if (pred(*begin)) {
             *firstOutput++ = *begin;
        } else  {
             *secondOutput++ = *begin;
        }
    }
}

int main() {
    splitData(std::istream_iterator<Person> { std::ifstream{ "pracownicy.txt" } }, {},
              std::ostream_iterator<Person> { std::ofstream{ "mezczyzni.txt" }, "\n" },
              std::ostream_iterator<Person> { std::ofstream{ "kobiety.txt" }, "\n" },
              [](const auto& p) {
                  return p.male;
              });

    return 0;
}

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