Newsgroup: it.comp.lang.c++
Titolo: Son incapace

Ciao Raga!
Sono alle prime esperienze di C++, quindi non abbiatene a male
se chiedo aiuti semplici semplici...
Devo creare un file html, partendo da una intestazione
(TESTA.HTM) e da una chiusura (CODA.HTM) date.
Ovviamente, in testa troviamo i soliti tag iniziali
dell'HTML,ai quali si aggiunge però l'intestazione di una
tabella.
Quindi... il mio programmino in C++, deve chiedere all'utente
quanti nominativi inserire, e poi creare un nuovo file ancora
HTML (NOMI.HTML, ad esempio) nel quale metterà, in ordine
    1.    Contenuto di TESTA.HTM
    2.    Nominativi richiesti all'utente
    3.    Tag di chiusura contenuti in CODA.HTM
Il mio problema, ovviamente, sta nella gestione file, nel senso
che non riesco a dire al compilatore di prendere tutto ciò che
sta in TESTA.HTM e portarselo in una variabile che aggiungerà,
al file NOMI.HTM, con un fout, il suo contenuto.
Cioè.... boh! :)
--
ICQ 74164582
http://members.xoom.it/Danka82/Index.htm
http://on.to/danka
DN...@libero.it

     3.    Tag di chiusura contenuti in CODA.HTM
Dunque, se ho capito bene, devi leggere due file per comporne un 
terzo. Prova a guardare questo programmino:
#include <fstream>
#include <string>
using namespace std;
int main()
{
  ifstream testa( "testa.htm" ), coda( "coda.htm" );
  ofstream nomi( "nomi.htm" );
  string linea;
 
  while( getline(testa, linea) ) 
    nomi << linea << endl;
  nomi << "pippo" << endl;
  nomi << "pluto" << endl;
 
  while( getline(coda, linea) ) 
    nomi << linea << endl;
}
Se non è questo quello che intendevi, o se c'è qualcosa che non è 
chiaro, chiedi pure.
-- 
Ciao, Marvin

 chiaro, chiedi pure.
mi da un pacco di errori il borland....
Innanzitutto grazie per la risposta...... cmq..... guarda qua
che pensavo io...
------------------------------
/* Il programma chiede all'utente quanti nominativi andranno
inseriti in un file html di cui sono dati i tag di apertura (e
di intestazione della tabella) sul file TESTA.HTM e quelli di
chiusura dul file CODA.HTM. Il nuovo file si chiamerà NOMI.HTM.
*/
# include <iostream.h>
# include <fstream.h>
# include <stdlib.h>
# include <conio.h>
# include <string.h>
# include <stdio.h>
int main ()
{
 int matricola[6];
 char nome[16];
 char cognome[16];
 int studenti, i;
 char intestazione;
 ifstream fin;
 ofstream fout;
 fin.open("testa.htm");
 fout.open("testa.htm", ios::app);
  if(fin.fail() || fout.fail())
  {
   cout << "Non riesco ad aprire il file!";
   exit (1);
  }
/*QUI CI DOVREI METTERE QUEL MALEDETTO CICLO WHILE CHE NON
RIESCO A CAPIRE.... QUALCOSA TIPO
while(fin.getline(????,??,'n\')) E SOTTO, NEL CICLO, LO
strncpy... DEVO STRUTTURARLO COSì..... MA NN CAPISCO! RIUSCITE
A CHIARIRMI? */
 cout << "Quanti studenti vuoi inserire? ";
 cin >> studenti;
 for (i=0; i<studenti; i++)
 {
  cout << endl << "Inserire numero di matricola (5 ch): ";
  cin >> matricola[6];
  cout << "Inserire cognome (15 ch): ";
  gets(cognome);
  cout << "Inserire nome (15 ch): ";
  gets (nome);
  fout << "<tr> \n <td>" << matricola[6] <<"</td>\n";
  fout << "<td>" << cognome <<"</td>\n";
  fout << "<td>" << nome <<"</td>\n</tr>\n";
 }
 /* COPIATURA DEL CONTENUTO IN CODA.HTM, PER CHIUDERE IL FILE
HTM CREATO..... INSOMMA, NON DEVO FARLO MANUALMENTE COME AVEVO
FATTO, BARANDO QUI SOTTO */
// fout << "</table> </body> </html>";
 cout << "\n L'elenco degli studenti è stato aggiornato nel
file nomi.htm";
 fin.close();
 fout.close();
 return 0;
}
// Grazie ancora, Marvin! :)
// danka

 che pensavo io...
Ho fatto qualche modifica al tuo programma (ho messo dei commenti nel 
testo). Adesso funziona?
# include <iostream.h>
# include <fstream.h>
# include <stdlib.h>
// # include <conio.h>
// conio.h non ti serve!
# include <string.h>
# include <stdio.h>
int main ()
{
  //int matricola[6];
  long matricola;
  // "matricola" č un'unica variabile, non un vettore
  char nome[16];
  char cognome[16];
  int studenti, i;
  char intestazione;
  ifstream fin;
  ofstream fout;
  fin.open("testa.htm");
  //fout.open("testa.htm", ios::app);
  fout.open("nomi.htm");
  // l'output va in "nomi", non in testa...
  if(fin.fail() || fout.fail())
    {
      cout << "Non riesco ad aprire il file!";
      exit (1);
    }
  /*QUI CI DOVREI METTERE QUEL MALEDETTO CICLO WHILE CHE NON
RIESCO A CAPIRE.... QUALCOSA TIPO
while(fin.getline(????,??,'n\')) E SOTTO, NEL CICLO, LO
strncpy... DEVO STRUTTURARLO COSě..... MA NN CAPISCO! RIUSCITE
A CHIARIRMI? */
  const int bufsize = 1000;
  static char buf[bufsize];
  while( fin.getline(buf, bufsize) )
    fout << buf << endl;
  cout << "Quanti studenti vuoi inserire? ";
  cin >> studenti;
  for (i=0; i<studenti; i++)
    {
      cout << endl << "Inserire numero di matricola (5 ch): ";
      cin >> matricola;
      cout << "Inserire cognome (15 ch): ";
      gets(cognome);
      cout << "Inserire nome (15 ch): ";
      gets (nome);
      fout << "<tr> \n <td>" << matricola <<"</td>\n";
      fout << "<td>" << cognome <<"</td>\n";
      fout << "<td>" << nome <<"</td>\n</tr>\n";
    }
  /* COPIATURA DEL CONTENUTO IN CODA.HTM, PER CHIUDERE IL FILE
HTM CREATO..... INSOMMA, NON DEVO FARLO MANUALMENTE COME AVEVO
FATTO, BARANDO QUI SOTTO */
  fin.close();
  fin.open("coda.htm");
  while( fin.getline(buf, bufsize) )
    fout << buf << endl;
  cout << "\n L'elenco degli studenti č stato aggiornato ";
  cout << "nel file nomi.htm\n";
  fin.close();
  fout.close();
  return 0;
}
-- 
Ciao, Marvin

     fout << buf << endl;
Certo! Semplice ma geniale! Chiudo la lettura di uno e lo apro
dell'altro...
Sono commosso... davvero, Marvin! Funziona! :)
Che bello!!!
Grazie! :)
Danka

 Grazie! :)
Prego!
-- 
Ciao, Marvin

 Cmq ora penso proprio di aver capito....
E' una keyword che indica che la tua variabile verrà creata una sola volta,
all'avvio del programma, e non verrà invece (come accade consuetamente)
creata e distrutta alla chiamata della funzione che la contiene.
Cio ha due vantaggi principali:
1) Se devi accedere molte volte a quella variabile, almeno eviti di starla a
ricreare tutte le volte, e guadagni tempo
2) Puoi mantenere inalterato il valore della variabile fra una chiamata e
l'altra della funzione
Es:
int incrementoSTATIC()
{
    static int x = 0;
    return ++x;
}
int incrementoNONSTATIC()
{
    int x = 0;
    return ++x;
}
Chiamando la prima funzione 3 volte, essa ritornerà prima 1, poi 2, poi 3
Chiamando la seconda funzione 3 volte invece resterai come un fessacchiotto
a guardare una fila di 1, 1, 1  ;)))

     ifstream fin2( "coda.htm" );
Io tutte sta cose me le appunto! :)
Grazie ancora!!
E grazie anche a [DOM3] per l'approfondimento sullo static! :)