Gestione file

di il
3 risposte

Gestione file

Ciao ragazzi, ho nuovamente problemi con la gestione dei file..
Ho un file così formattato:

<data> <descrizione> <cifra>
<data> <descrizione> <cifra>
..

Quello che devo fare è restituire la somma algebrica di tutte le "cifre" contenute nel file, non conoscendo a priori da quante righe è composto il file.
Queste è la funzione che ho implementato:

float saldo(char nomefile[20]){
    stringstream is[10];
    fstream myfile;
    string line;
    float vett[10],sum=0;
    int i=1,j=0;

    myfile.open(nomefile,fstream::in);
    if (!myfile.is_open()){
        cout<<"errore: file non esistente"<<endl;
        return -1;
    }

    while(!myfile.eof()){
       myfile>>line;
        if (i%3==0){
            is[j]<<line;
            is[j]>>vett[j];
            j++;
        }
        i++;
    }

    for(i=0;i<j;i++){
        sum=sum+vett[i];
    }
    myfile.close();
    cout<<sum;
    return sum;
}

il codice funziona, ma non mi piace il modo in cui è stato implementato (mi sembra di barare ).
Questo è per grandi linee il modo in cui si può fare o ci sono soluzioni migliori?

3 Risposte

  • Re: Gestione file

    Va bene. i++ lo potresti mettere all'interno della condizione dell'if, il for è inutile, potresti sommare dentro l'if stesso.

    Cosa ti perplime? Vorresti qualcosa che ti segnali una malformazione di una riga?
  • Re: Gestione file

    Non capisco se questo è il modo giusto di leggere da file.. Non credo sia il caso più generale possibile. Ad esempio, se avessi due righe consecutive formattate diversamente, sulle quali svolgere operazioni diverse, non potrei usare questo metodo del conteggio delle parole per generare il risultato che vorrei.
    es: stampare, per ogni persona, cognome, matricola e media degli esami.
    (file)
    <cognome> <matricola> <numero_Esami>
    <voto1> <voto2> … <votoN>
    <cognome> <matricola> <numero_Esami>
    <voto1> <voto2> … <votoM>

    in questo caso non potrei fare come fatto nell'altro caso in quanto non è noto a priori il numero di elementi presenti in ogni riga.
    Non so se mi sono spiegato bene.
  • Re: Gestione file

    Un altro problema, questa volta in scrittura su file:
    devo scrivere su un file una riga inserita da tastiera tramite una funzione.
    Ecco il codice
    
    char nomefile[20];
    bool flag=false;
        cin>>nomefile;
        while (!flag){
            cin>>scelta;
            switch (scelta){
                case 1: func1(nomefile);
                        flag=true;
                        break;
    
                case 2: add_line(nomefile);
                        break;
                default: cout<<"error";
            }
        }
        ..
        void add_line(char nomefile[20]){
        ofstream myfile;
        string line;
        myfile.open(nomefile,fstream::app);
        cout<<"inserire riga: ";
        getline(cin,line);
        myfile<<endl<<line;
        myfile.close();
    }
        
    Il problema è che non mi fai mai inserire la riga da tastiera quando arrivo al getline
Devi accedere o registrarti per scrivere nel forum
3 risposte