Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: %Jotakin% ->Html -riville ->%Jotakin%!?

CoolC++ [07.05.2007 13:54:40]

#

Joo, miten voidaan C++ -ohjelmasta laittaa jotakin %*% -sisälle tallentaen txt ja lopuksi halutessa siirtää html -tiedostoon kyseinen %*% samaan paikkaan kuin %*% -merkintä on laitettu, ellei se jo onnistu tossa ensimmäisessä määrittelyssä html:lläksi!? Itse html ja txt -filut ovat jo etukäteen tehty johon on määritelty %*% -paikat (Otsikot) tietyille haluamille asioille, mutta itse merkkien sisälle tiedon saaminen ei onnistu, eli miten saan tiedot %*% -merkkien sisälle!?

Jos vielä jotakin mainitaan ohjelmani, jota käytän on "Borland C++ Builder 5" ja teen C++ dos pohjaista ohjelmaa.

os [07.05.2007 15:59:53]

#

Voisit yrittää ilmaista vähän selvemmin, mitä yrität saada aikaan. Itse en ainakaan tuosta saanut juuri mitään selkoa.

Haluatko siis määritellä html-tiedostoihin jonkinlaisia vakioita?

...
<title>%otsikko%</title>
</head>
<body bgcolor="%taustavari%">
...

... jotka määritellään toisessa tiedostossa:

%otsikko% = "X:n kotisivu"
%taustavari% = "#abcdef"

TsaTsaTsaa [07.05.2007 17:18:06]

#

Jos txt-tiedosto on muotoa:

%korvattava% Korvaava teksti

Missä %korvattava% on yksi yhtenäinen merkkijono ja se korvataan loppurivillä, saattaa seuraava hatusta heitelty koodi toimia (virheitäkin voi olla).

#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <cstdlib>

using namespace std;

struct Korvaus
{
   string korvattava;
   string korvaaja;
};

int main() {
   // Avataan txt-tiedosto
   ifstream txt(TXT_TIEDOSTO);

   // Korvausparit vektoriin
   vector< Korvaus > korvaukset;

   string rivi;

   // Käydään .txt-tiedosto läpi
   while ( getline(txt, rivi) )
   {
      string korvattava;
      string korvaaja;
      istringstream is(rivi);
      is >> korvattava;
      getline( is, korvaaja );

      korvaukset.push_back( { korvattava, korvaaja } );
   }

   // Suljetaan txt-tiedosto ja avataan html
   txt.close();
   ofstream html(HTML_TIEDOSTO);  // Tähän kirjoitetaan
   ifstream html_in(TOINEN_HTML); // Tästä luetaan

   // HTML-tiedoston läpikäynti ja korvaukset
   while ( getline( html_in, rivi ) )
   {
      for ( unsigned int i = 0 ; i < korvaukset.size() ; ++i )
      {
         if ( rivi.find( korvaukset.at(i).korvaaja ) != string::npos )
         {
            rivi.replace( rivi.find( korvaukset.at(i).korvaaja ),
                          korvaukset.at(i).korvaaja.length(),
                          korvaukset.at(i).korvattava );
         }
      }

      // Muunneltu rivi talteen
      html << rivi << endl;
   }

   // Suljetaan tiedostot
   html.close();
   html_in.close();

   return EXIT_SUCCESS;
}

Muunneltu html siis tallennetaan eri tiedostoon kuin alkuperäinen.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta