Odczyt pliku binarnego.

0

Witam mam problem z plikiem binarnym.Mniej więcej wiem jak go odczytac i zapisac z tego poradnika Odczyt i zapis plików binarnych w Cpp
Ale np nie wiem jak odczytac gdy w pliku nie ma jednej struktury a jest kilka.W plokach tekstowych uzywalo sie end of file przy strumieniu a getline sam sie konczyl.Tutaj mam dzialac na eof?

0

Myslalem nad zrobieniem tablicy struktur,ale nie znam rozmiaru.Mialem takie zadanie ze w jednym pliku binarnym mialem strukture gdzie bylo id klienta i saldo,a w pliku tekstowym w jednej linijce id klienta a w drugiej ile dodano do konta lub zabrano klient mogl pare razy wystapic.Ktos ma pomysl jak to zrobić?Podobno dynamicznie struktury nie sa optymalne.

0

Jeśli masz kilka struktur, to chyba jedyną opcją jest czytanie go ręcznie. Ale plik musi być zapisany w taki sposób, żeby można go było odczytać. Tzn. np. pierwszy bajt Ci mówi, ile masz obiektów jednej struktury. I tyle razy odczytujesz. Potem, między strukturami masz kolejny bajt, który Ci mówi, ile masz elementów drugiej struktury. Musisz sam sobie opracować dobry format takiego pliku.
Na początek jest dobrze dać jakiś identyfikator, np: "ABC1", dzięki któremu będziesz mógł stwierdzić, że to jest faktycznie format Twojego pliku i ewentualnie w której wersji.

0

Jeśli nie wiesz, ile danych masz do wczytania, możesz wykorzystać na przykład listę jednokierunkową.

0

Jezeli umiesz okreslić wielkość struktury to czyatsz aż plik się skończy prawda?
Jeżeli masz różne struktury to albo musisz mieć jakiś bajt na początku określający jaka to albo...
gdy masz wpływ na tworzenei pliku to możesz jakoś te struktury uporządkować i wtedy tylko masz stracony bajt na ich podzielenie.

0

Może źle się wyraziłem,wiem jaka jest struktura tzn jest w niej ID i saldo,ale nie pamietam czy w zadaniu było powiedziane ile jest osób.Czyli jakbym znał ilość osób to mógłbym zrobić np tablice struktur,a jakbym nie znał to implementować liste tak?Taki mialem własnie plan.

0

Jeszcze napisałem inny temat,ale został usunięty:
Wyjaśni ktoś po co użyto w tym kodzie

setw()
 
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>

const int NAME_SIZE = 20;
using namespace std;

struct clientData
{
	unsigned int accNum;
	char lastName[NAME_SIZE];
	char firstname[NAME_SIZE];
	double balance;
};

int main()
{
	string fileName_ = "credit.dat";
	clientData client;
	unsigned int accountNum = 0;

	//========================================================================
	//wyswietlenie poczatkowej zawartosci
	cout << "Wyswietlenie poczatkowej zawartosci\n";

	ifstream inFile;
	//inFile.open(fileName_.c_str(), ios_base::binary | ios_base::in);
	inFile.open(fileName_, ios_base::binary | ios_base::in); //zadziała od C++11

	if (inFile.is_open())
	{
		cout << setw(5) << "Numer"
			<< setw(15) << "Nazwisko"
			<< setw(15) << "Imie"
			<< setw(10) << "Kwota" << '\n';
		while (inFile.read((char*)&client, sizeof client))
		{
			cout << setw(4) << client.accNum
				<< setw(15) << client.lastName
				<< setw(15) << client.firstname
				<< setw(10) << client.balance << "\n";
			accountNum++;
		}
		inFile.close();
	}
	else
		return 0;
	

Czytając ten poradnik //4programmers.net/C/Artyku%C5%82y/Odczyt_i_zapis_plik%C3%B3w_binarnych_w_Cpp
Nie było to używane,ale było używane to:

#pragma pack(push, 1)
struct Pixel
{
 unsigned char b, g, r;
};
#pragma pack(pop)
2

http://www.cplusplus.com/reference/iomanip/setw/
Określa na minimum ilu polach zostanie wyświetlona zawartość zmiennej następującej po użyciu tego manipulatora.
BTW: można to wywnioskować z obserwacji kodu i działania programu.

0

Czyli zostało to użyte tylko w celach czystko kosmetycznych?

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