C++ Bibliothek, die Html Dateien generieren kann
-
Ich denke mal, DAS wird dir gefallen.
Cheers!
-
==Fidelio== schrieb:
Ich denke mal, DAS wird dir gefallen.
Cheers!
Naja. Mit Open Office geht das. Aber mit Excel hab ich es noch nicht ausprobiert zu öffnen...
-
khalderon schrieb:
Naja. Mit Open Office geht das. Aber mit Excel hab ich es noch nicht ausprobiert zu öffnen...
Sollte mit Excel funktionieren. Ist zwar nicht ganz so perfekt beim Öffnen von CSV-Dateien wie OpenOffice, aber hatte noch nie Probleme.
Aber wieso erstellst du dir nicht kurz eine kleine Bibliothek?
class CCell { // Attributes // private: std::string m_Value; // Methods // public: void set_value_string(std::string Value) { m_Value = Value; }; std::string const& get_value_string() const { return m_Value; }; template<typename T> void set_value(T Value) { m_Value = (std::stringstream() << Value).str(); }; } std::ostream operator <<(std::ostream& rOutput, CCell const& rCell) { rOutput << "<td>" << rCell.get_value_string() << "</td>"; return rOutput; } class CRow { // Attributes // private: std::vector<CCell> m_CellVector; // ... } std::ostream operator <<(std::ostream& rOutput, CRow const& rRow) { rOutput << "<tr>" << /* ... */ << "</tr>"; return rOutput; } class CTable { // Attributes // private: std::vector<CRow> m_RowVector; // ... } std::ostream operator <<(std::ostream& rOutput, CTable const& rTable) { rOutput << "<table>" << /* ... */ << "</table>"; return rOutput; }
Ich denke das Prinzip dürfte klar sein und in 30 Minuten hast du die paar Klassen fertig. Zudem ist es eine gute Übung
Grüssli
-
Um HTML-Code generieren zu lassen kann ich dir auch die Boost HTML Library empfehlen:
document doc; ptr_element_t table(new element("table")); ptr_element_t tr(new element("tr")); ptr_element_t td(new element("td")); td->setValue("Zelleninhalt"); tr->addChild(td); table->addChild(tr) doc.addChild(table) cout << doc.as_string() << endl;
Mit etwas Übung (und ein paar eigenen Helper-Funktionen) kann man damit ganz einfach kleinere Webseiten basteln.
Greeetz Kessi
-
KessiMC schrieb:
Um HTML-Code generieren zu lassen kann ich dir auch die Boost HTML Library empfehlen:
document doc; ptr_element_t table(new element("table")); ptr_element_t tr(new element("tr")); ptr_element_t td(new element("td")); td->setValue("Zelleninhalt"); tr->addChild(td); table->addChild(tr) doc.addChild(table) cout << doc.as_string() << endl;
Mit etwas Übung (und ein paar eigenen Helper-Funktionen) kann man damit ganz einfach kleinere Webseiten basteln.
Greeetz Kessi
Hey! Ich wusste nicht dass es boost::html gibt. Wo ist das denn zu finden?
Dravere, deine Vorgehensweise finde ich ganz gut, aber ich war mich zu faul um etwas selbstständig zu basteln.
-
Das wäre dann hier:
http://www.ibusy.com/articles/software-development/boost-html-library.htmlIst im normalen Boost-Paket nicht dabei, wird lediglich unter der Boost-Lizenz vertrieben.
greeetz
Kessi
-
Hallo wieder!
Hab mir die Bibliothek selbst gebastelt.
Man benutzt sie bspw. so:#include "html_table.hpp" int main() { using namespace ZM::Html; Table t("testing"); t.add_row() .add_heading("Column 1").add_heading("Days").add_heading("Balance"); t.add_row() .add_cell("hi").add_cell("test").add_cell("okay"); t.add_row() .add_cell("next").add_cell(23).add_cell(-32.032); t.add_row() .add_cell("this is a long cell..."); }
Daraus kriegt man eine html Datei, nämlich:
<html> <head><title>testing</title></head> <body> <table border="1" cellpadding="5"> <tr><th>Column 1</th><th>Days</th><th>Balance</th></tr> <tr><td>hi</td><td>test</td><td>okay</td></tr> <tr><td>next</td><td>23</td><td>-32.032</td></tr> <tr><td>this is a long cell...</td></tr> </table> </body> </html>
Die Schnittstelle sieht so aus:
#ifndef GUARD_HTML_TABLE #define GUARD_HTML_TABLE 1 namespace ZM { namespace Html { class Table { struct impl; impl* pimpl; Table(const Table&); Table& operator=(const Table&); public: Table(const char* name); ~Table(); class Row { friend class Table; Table& t; Row(Table&); public: ~Row(); class Cell { friend class Row; Row& r; Cell(Row&, const char*); Cell(Row&, int); Cell(Row&, double); ~Cell(); }; class Heading { friend class Row; Row& r; Heading(Row&, const char*); ~Heading(); }; Row& add_heading(const char*); Row& add_cell(const char*); Row& add_cell(int); Row& add_cell(double); }; Row add_row(); }; } } #endif
-
khalderon schrieb:
...
Und wo genau liegt das Problem?
-
drakon schrieb:
Und wo genau liegt das Problem?
Wahrscheinlich nirgends. Er/sie ist nur so vorbildlich und präsentiert die Lösung, falls jemand über die Forensuche wieder auf das Problem stösst
Grüssli
-
Eine weitere gute Bibliothek zum Erstellen von HTML-Code ist cgicc: http://www.gnu.org/software/cgicc/.
-
leute,
das gefreut mich das mein boost.html library in deutschland auch benutz ist.