Narzędzia użytkownika

Narzędzia witryny


format

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Previous revision
Next revision
Previous revision
format [2008/04/16 22:37]
piechot
format [2008/04/16 23:50] (aktualna)
piechot
Linia 1: Linia 1:
 ====== Biblioteka Boost Format ====== ====== Biblioteka Boost Format ======
 + --- //​[[tpiechot@stud.elka.pw.edu.pl|Tomasz Piechota G1ISI]] 2008/04/16 23:44//
 +
 Biblioteka Boost Format dostarcza klasę do formatowania argumentów zgodnie z dostarczonym łańcuchem formatującym. Podstawowe różnice w stosunku do funkcji printf, to m.in.: Biblioteka Boost Format dostarcza klasę do formatowania argumentów zgodnie z dostarczonym łańcuchem formatującym. Podstawowe różnice w stosunku do funkcji printf, to m.in.:
   * deterministyczne zachowanie, nawet w przypadku podania błędnych argumentów (generuje wyjątek lub ignoruje błąd, w zależności od ustawień).   * deterministyczne zachowanie, nawet w przypadku podania błędnych argumentów (generuje wyjątek lub ignoruje błąd, w zależności od ustawień).
Linia 103: Linia 105:
     * s or S - łańcuch znaków     * s or S - łańcuch znaków
     * c or C - jeden znak     * c or C - jeden znak
 +
 +
  
 ==== Przykłady formatowania przy użyciu łańcucha znaków ==== ==== Przykłady formatowania przy użyciu łańcucha znaków ====
Linia 129: Linia 133:
 </​code>​ </​code>​
  
 +Ciekawym przykładem może być również technika wymuszająca wcięcie (z wypełnieniem lub bez) niezależnie od długości poprzednich argumentów:​
 +<code cpp>
 +// w obu przypadkach liczba 199 zaczyna się po 15 znakach
 +std::cout << boost::​format("​%s %|15t|%d%"​) % "​Abcdefgh"​ % 199 << std::​endl; ​ // --> "​Abcdefgh ​      ​199"​
  
 +// z wypełnieniem (duże T + wypełniacz)
 +std::cout << boost::​format("​%s %|15T-|%d%"​) % "​Abcde"​ % 199 << std::​endl; ​   // --> "Abcde ---------199"​
 +</​code>​
  
  
Linia 207: Linia 218:
 </​code>​ </​code>​
  
-===== Ciekawe przykłady użycia ===== 
  
  
- --- //[[tpiechot@stud.elka.pw.edu.pl|Tomasz Piechota]] 2008/04/16 00:38//+ 
 + 
 + 
 +===== Przykład użycia ===== 
 +Poniższy program wyświetla listę produktów w postaci sformatowanej tabeli 
 + 
 +<code cpp> 
 +#include <​iostream>​ 
 +#include <​boost/​format.hpp>​ 
 +#include <​string>​ 
 +#include <​list>​ 
 + 
 +using namespace std; 
 +using namespace boost; 
 + 
 +class Produkt 
 +
 +public: 
 +    Produkt(string n, int i, float c, float z) : nazwa(n), ilosc(i), cena(c), zmiana(z) { } 
 +    string nazwa; 
 +    int ilosc; 
 +    float cena; 
 +    float zmiana; 
 +}; 
 + 
 +int main(int argc, char *argv[]) 
 +
 +    // Lista obiektów 
 +    list<​Produkt>​ p; 
 +    p.push_back(Produkt("​Widelec",​ 4, 4.99f, 1.021f)); 
 +    p.push_back(Produkt("​Łopatka",​ 32, 2.99f, -10.2292f));​ 
 +    p.push_back(Produkt("​Packa",​ 19, 19.39f, 19.1133f));​ 
 + 
 + 
 +    // pozioma linia 
 +    format line("​%|55T-|"​);​ 
 + 
 +    // nazwa: ​ %|1$-.20s| wyrownanie do lewej, maksimum 20 znakow 
 +    // ilość: ​ %2% bez dodatkowego formatowania 
 +    ​// cena:   %|3$.2f| - liczba zmiennoprzecinkowa,​ do dwóch miejsc po przecinku 
 +    // zmiana: %|4$+10.4f| - wymuszenie wyświetlania znaku +, szerokosc 10, do 4 miejsc po przecinku, wyrównanie do prawej 
 +    format row("​|%|1$-20.20s|%|21t||%2%%|32t||%|3$.2f|%|43t||%|4$+10.4f|%|54t||"​);​ 
 + 
 +    cout << line << endl; 
 +    cout << row % "Nazwa produktu"​ % "​Ilosc"​ % "​Cena"​ % "​Zmiana (%)" << endl; 
 +    cout << line << endl; 
 +     
 +    for (list<​Produkt>​::​const_iterator it = p.begin(); it != p.end(); it++) 
 +        cout << row % it->​nazwa % it->​ilosc % it->cena % it->​zmiana << endl; 
 +     
 +    cout << line << endl; 
 +     
 +    return 0; 
 +
 + 
 +</code>
format.1208378222.txt.gz · ostatnio zmienione: 2008/04/16 22:37 przez piechot