Witam robię sobie program który odpowiada za zarządzanie domowym budżetem. Każdą transakcje chce wpisać do pliku w uporządkowany sposób. I teraz pojawia się problem bo nie wiem jak ustawić by na przykład sklep zajmował 6 znaków. Chodzi o to jak na np zamiast sklepu napisze inne to wszytko jest poprzesuwane lub jak zamiast ile będzie 10000 to wszystko jest poprzesuwane. Nie umiem tego zrobić na stałych miejscach.
Chodzi Ci o to, żeby formatować string tak, żeby miał określoną długość? To zainteresuj się std::setw
.
Albo zrób to w sposób bardziej standardowy: wybierz sobie jakiś gotowy format przechowywania danych tekstowych, np. JSON-a lub XML, i korzystaj z tego.
void Budget::openFileHistory() {
myFileHistory.open( getNameHistoryFile(localTime) , std::ios::app);
myFileHistory.seekg(0 , std::ios::end);
if (myFileHistory.tellg() == 0) {
drawHeadlines();
}
}
void Budget::drawHeadlines() {
myFileHistory << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
myFileHistory << "+ + + + +" << std::endl;
myFileHistory << "+ DATA Y:M:D + GDZIE_WYDANE + ILE + BUDZET +" << std::endl;
myFileHistory << "+ + + + +" << std::endl;
myFileHistory << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
}
void Budget::saveTransactionToFileHistory(Transaction &transaction , LocalTime &localTime) {
for (int i = 0 ; i < 69 ; ) {
if ( i == 0 || i == 15 || i == 29 || i == 49) {
myFileHistory << '+';
++i;
}
else if (i == 3 ) {
myFileHistory << localTime.getTime();
i += 9;
}
else if (i == 22) {
myFileHistory << transaction.getWhereSpentMoney();
i += 6;
++i;
}
else if (i == 39) {
myFileHistory << transaction.getWhoMuchSpentMoney();
i += 6;
}
else if (i == 56) {
myFileHistory << getBudget();
i += 7;
}
else if (i == 68) {
myFileHistory << '+' << std::endl;
++i;
}
else {
myFileHistory << ' ';
++i;
}
}
}
chodzi o to by to ładnie wyglądało tak jak w drawHeadline ale mam problem bo jak wpisuje różne słowa to mam poprzesuwane '+'
hehe, może najpierw zbuduj string, a potem daj string[i] = '+', w miejsca gdzie ma być element tabelki i w najgorszym wypadku zostanie nadpisana poprzednia wartość, ale może też nie pójść skalibrować, z powodu różnych wielkości czcionki.
Ale może też się udać.
W pliku Json możesz pozapisywać tylko surowe dane, które następnie wyciągasz z tego pliku, sprawdzasz ile znaków ma konkretna zmienna (np. data lub gdzie_wydane) i dokładasz odpowiednią ilość spacji, tak aby zawsze data miała tyle samo znaków.
Z resztą nieważne czy użyjesz pliku Json, czy Xml, czy zapiszesz to do jakiejś bazy danych. Lepiej oddzielić jest surowe dane od wyglądu.
Jeśli o Json chodzi, to ja używam Qt i korzystałem z tego tutoriala: http://doc.qt.io/qt-5/qtcore-json-savegame-example.html