Formatowanie danych zapisywanych do pliku txt

0

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.

0

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.

0
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 '+'

0

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ć.

0

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

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