jak w temacie.
Mam strukture o zmiennych:
char[50];
char[50];
int;
oraz wektor o tej strukturze. Dane z pliku wrzucilem do wektora, i po sortowaniu chcialbym te dane wrzucic do drugiego pliku binarnego. Jak to zrobic?
0
0
vector<osoba> elo;
osoba jakas;
ofstream plik2("dane.dat", ios::binary | ios::app);
cout << "Podaj imie, nazwisko, wzrost" << endl;
cin >> jakas.imie >> jakas.nazwisko >> jakas.wzrost;
plik2.write((char*)(&jakas), sizeof(jakas));
plik2.close();
ifstream plik("dane.dat", ios::binary);
for (int i = 1;; i++) {
plik.read(reinterpret_cast<char*>(&jakas), sizeof(jakas));
if (plik.eof()) break;
elo.push_back(jakas);
sort(elo.begin(), elo.end());
}
plik.close();
0
Wg jakiego kryterium sortujesz te osoby?
Ja raczej zrobiłbym to tak:
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <string>
#include <cstring>
#include <cctype>
struct Person {
enum {BUFFER_SIZE = 50};
char firstname[BUFFER_SIZE];
char surname[BUFFER_SIZE];
unsigned int height;
Person(const char *fname, const char *sname, unsigned int h) : height(h)
{
strncpy(firstname, fname, BUFFER_SIZE);
strncpy(surname, sname, BUFFER_SIZE);
firstname[BUFFER_SIZE - 1] = '\0';
surname[BUFFER_SIZE - 1] = '\0';
}
};
int main(int argc, char *argv[]) {
Person p1("John", "Smith", 180);
Person p2("Ann", "Watts", 168);
std::vector<Person> people {p1, p2};
std::sort(people.begin(), people.end(), [](const Person &a, const Person &b) {
return strncmp(a.surname, b.surname, Person::BUFFER_SIZE);
});
std::ofstream file ("data.bin", std::ios::binary);
for (const auto &p : people) {
file.write(reinterpret_cast<const char*>(&p), sizeof p);
}
file.close();
return 0;
}
1
Najlepiej nie robić tego w ten sposób.
Obecne standardy kodowania zachęcają do korzystania z xml-a, JSon-a, CSV
i w razie potrzeby spakowania takiego pliku (najlepiej zip-em albo Zstandard).
Takie rozwiązanie łatwiej się utrzymuje i skaluje w razie potrzeby.
Obecnie nowe formaty danych binarnych wprowadza się jedynie dla skomplikowanych i dużych danych (zwykle chodzi o media audio video). Twój przypadek raczej pod to nie podpada.
Tu znajdziesz przykład jak szybko i prosto zapisywać i odczytywać dane w xml-u: https://4programmers.net/Forum/C_i_C++/300163-pytanie_o_strukture_danych_w_pliku_txt?p=1423367#id1423367