HTML Generator in C++ (Dateien editieren, speichern und anzeigen)



  • am besten liest du dir erstmal das durch http://www.cpp-home.com/loobian/tutorials/file_io/1.php

    und die Grundlage könnte so funktionieren(nicht getestet):

    #include <fstream>
    using namespace std;
    
    void htmlbauen(void)
    {
      ofstream html_datei("seite1.htm");
      html_datei << "<html><head></head><body><b>In Edit1 steht:";
      html_datei << Edit1->Text.c_str()<<"</b></body></html>";
      html_datei.close();
    }
    

    [ Dieser Beitrag wurde am 10.06.2003 um 14:05 Uhr von dreaddy editiert. ]



  • naja du kannst entweder die vorlagen-seiten hart im programm verdrahten, wie in etwa in meinem beispiel oder du hast eine externe vorlagen-datei die du einliest und in der du die zu ersetzenden felder mit eigenen "tags" versiehst, nach denen du dann suchst und dann ersetzt. am ende speicherste das ganze wieder.



  • hmpf.. doppelpost...

    [ Dieser Beitrag wurde am 10.06.2003 um 14:07 Uhr von Sunday editiert. ]



  • Vielen Dank erstmal, dreaddy & sunday... Suchen und ersetzen mit Tags? 😕 Genau die Idee hatte ich auch, der Mist ist nur, egal wie ich an die Sache rangehe, durch meine geringen Kenntnisse, werden meine Möglichkeiten gleich wieder eingeschränkt, sinnlos.... 🙄



  • Ich denke Sunday meint du baust eine ganz normale htmldatei"Schablone" mit einem html Programm deiner Wahl und setzt dann an die Stellen wo du Variablen Inhalt haben willst eine Markierung, beispielsweise {<Name>} und {<Strasse>}
    jetzt liest du diese Schablone ein, ersetzt die von dir gesetzte Markierung durch den Namen oder die Strasse und schreibst sie in eine andere Datei hinein.

    Also aus

    "Hier ist das Grab von {<Name>} sein Haus in der {<Strasse>} erbt dreaddy"
    wird nach der Umwandlung
    "Hier ist das Grab von Nivada sein Haus in der Nordstrasse erbt dreaddy"

    wenn du in Edit1 "Nivada" und in Edit2 "Nordstrasse" eingetragen hast

    hoffe das war verständlich 😛

    [ Dieser Beitrag wurde am 10.06.2003 um 15:12 Uhr von dreaddy editiert. ]



  • Schon klar..danke..ich werde es einfach mal probieren, also dann, bis eventuell morgen! ;o)



  • Wie ersetze ich Tags in einem HTML Dokument mit den Werten, welche ich in meinem Programm eingegeben habe? Auch die fetig generierte Datei abzuspeichern, macht mir so meine Gedanken...ich brauch wirklich jede kleine Hilfe! Danke, Mario!



  • Würd sagen
    -Den gesamten Inhalt der Datei in einen AnsiString speichern
    -Mal in der Hilfe unter Suchen "StrUtils" eingeben und alles was verwendbar klingt durchlesen (besonders StringReplace 🙄 ).
    -Das frisch erworbene Wissen anwenden um den AnsiString mit dem Inhalt der Schablone zu bearbeiten und danach alles wieder unter anderem Namen auf die Festplatte zurückzuschreiben.

    [ Dieser Beitrag wurde am 11.06.2003 um 15:37 Uhr von dreaddy editiert. ]



  • Klappt wunderbar, obwohl ich von den meisten Hilfedatein überhaupt nicht begeistert bin, war sie mir jedoch dieses mal recht hilfreich. Ich bedanke mich bei allen, die mitgeholfen haben....thanx!!!



  • Ich habe das jetzt probiert mit dem Ansi String, klappt soweit ganz gut. Die Frage ist nun, wie ich Strings á la

    <body bgcolor="#FFCC33" text="black">

    einlese? Da Ich sicherlich Probleme mit den Gänsefüsschen bekommen werde!?
    Wie kann ich das Problem umgehen, bzw. gibts nen Trick?

    Bitte um Antwort, danke, Mario A.



  • gibt keine Probleme, du musst nur dadrauf achten das wenn du mit denen etwas machen willst du \" verwendest



  • Vielleicht noch etwas deutlicher: solange du nur mit Variablen arbeitest (String bla = Edit1->Text;) brauchst du dir um Sonderzeichen keine Gedanken zu machen, der AnsiString erledigt das alles intern.

    Nur wenn du direkt im Quellcode Zuweisungen durchführst (String bla = "Er sagte \"Hallo!\" bevor er ging.";), dann, und nur dann musst du für die Sonderzeichen Escape-Sequencen benutzen.



  • Okay, mein Projekt nimmt seinen Lauf...das klappt jetzt schon alles wunderbar, der HTML Code wird einwandfrei generiert und in einem RichEdit Feld angezeigt. Dieser Code muß an sich nicht angezeigt werden, am liebsten wäre mir das er bei Klick auf Button in eine HTML Datei geschrieben wird. (datei muß angelegt werden) Wäre es, soweit dann alles klappt, eigentlich möglich, dass ich auf Buttonklick, den generierten Code in einer HTML-Datei speichere und diese dann, auf den Server übertrage? Welche Komponente nutze ich dazu?

    MfG. Mario A.



  • Möglich ist fast alles 😃
    Du speicherst den Kram erstmal auf der Festplatte und danach baust du dir entweder selbst mit nem ClientSocket einen Uploader oder du benutzt die Indy Komponenten.



  • Hi Dreaddy! Kannst du dir vielleicht mal mein anderes Posting ansehen:

    SaveDialog => Datei mit teilweise merkwürdigem Inhalt

    Denn bevor ich den Upload realisiere, steht mir noch dieses plötzlich aufgetretene Problem im Wege. Was ist der Unterschied zwischen Indy, bzw. ClientSocket, eventuell Vor- und Nachteile?!

    MfG. Mario A.



  • Naja Indy ist halt schon fertig(FtpDaten eintragen, verbinden und dann uploaden mit ner funktion) wärend du mit Clientsocket alles nochmal selber erfinden müsstest(man lernt mehr dadurch, fehlersuche geht schneller weil man genau weiss was passiert dauert aber länger bis das fertig ist, daher nicht unbedingt effizient 😃 aber wenn du sowas nie machst wrist du auch nie erfahren wie das ftp Protokoll funktioniert).

    Und wieso Richedit? Mach das doch so in der Art:
    generier eine Textdatei namens temp1.txt und tippe einen Text oder eine Htmldatei die ein oder mehrmals {$Name} enthält

    // Form enthält 1 Memo(Memo1) und 1 Button(Button1)
    
    bool generate_htm(char* schablone, char* output)
    {
    
      bool retval = false;
      ifstream htm_template(schablone, ios::binary);
      if(htm_template)
      {
    
        string inhalt;
    
        while(!htm_template.eof())
        {
          char zwischen;
          if(htm_template.get(zwischen))
          {
            inhalt += zwischen;
          }
        }
        htm_template.close();
        inhalt = StringReplace(inhalt.c_str(), "{$Name}", rand(), TReplaceFlags() << rfReplaceAll  << rfIgnoreCase).c_str();
    
        Form1->Memo1->Text = inhalt.c_str();// nur zum anschauen, das memo wird nicht benötigt damit der kram funzt
    
        ofstream htm_output(output, ios::binary | ios::trunc);
        if(htm_output)
        {
          htm_output.write(inhalt.c_str(), inhalt.length());
          retval = true;
        }
    
      }
      else ShowMessage("Fehler beim Öffnen der Templatedatei");
    
      return retval;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      generate_htm("temp1.htm", "output1.htm");
    }
    //---------------------------------------------------------------------------
    

    [ Dieser Beitrag wurde am 18.06.2003 um 10:50 Uhr von dreaddy editiert. ]



  • Aufjedenfall ein genialer Code, viel kürzer und effizienter als mein Newbie-Code, aber es funzt trotzdem soweit, dass er mir jetzt die HTML Datei auf Platte erstellt. :p (werd sicher mal nebenbei deinen Code analysieren, also danke noch mal, deine Schreibarbeit war net umsonst) Mein momentanes Problem ist, dass ich gar keine Indy-Komponenten bei mir installiert habe, bzw. sie nicht finden kann.. 😕 ..so ein Mist...aber warum sollte alles ohne Probleme funktionieren, ich meine, immerhin programmieren wir ja!! 😉 Kannst du mir/jemand weiter helfen?

    *tiefineurerschuldstehundmichnochmalsbedank*

    Mario A.



  • Die war eh nicht umsonst weil ich die für mich selber auch benutze. 😃
    Ich wollt dich halt nur erstmal selber bauen lassen :p .
    Und Indy Komponenten sind ab BCB 6.0 gleich mit dabei, wenn du den noch nicht hast lad sie bei http://www.indyproject.org/ runter.



  • So, nu sind die ganzen Indy Kompnenten installiert und werden ordnungsgemäß angezeigt. Leider habe ich überhaupt keine Ahnung und auch nach ewiger Suche habe ich keine wirklich guten Hinweise gefunden, um die FTP Übertragung zum laufen zu bringen. Ich habe folgenden Quelltext:

    IdFTP1->Host="www.heute-schon-spaß-gehabt.de";
    IdFTP1->User="willspass";
    IdFTP1->Password="drin";
    
    IdFTP1->Put(OpenDialog1->FileName, ExtractFileName(OpenDialog1->FileName), OpenDialog1->Execute());
    

    Als Fehlermeldung erhalte ich:
    Im Projekt ist eine Exception der Klasse EIdConnClosedGracefully aufgetreten. Meldung: Die Verbindung wurde erfolgreich geschlossen. Proßez wurde angehalten....

    Muß ich bei diesem IndyFTP noch nen Pfad angeben oder irgendwas beachten? Ich will übrigens nur diese eine (HTML-)Datei übertragen.



  • Ich fürchte da bin ich dann auch am Ende :d
    hab ehrlichgesagt noch nie mit Indy gearbeitet.
    Beim BCB ist aber ein Beispiel bei das eine Datei auf einen FTP uploaded, das kannich dir gern schicken wenn du mir deine mail verrätst.
    Ansonsten kann ich dir beim Indy nimmer weiterhelfen 😉 .


Anmelden zum Antworten