Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    [c++] Calcolo rapidissimo ma... senza cout non mi salva tutto nel file...

    codice:
    if (ritardi.size() !=0) {
    
    cout << "\n\n Sto salvando in file txt ... \n\n";                   
                       
    ofstream fout;
    fout.open("ritardi-quartine-senza-cout.txt", ios::app);                   
    
    fout << quartine[0];
    fout << ",";
    fout << quartine[1];
    fout << ",";
    fout << quartine[2];
    fout << ",";
    fout << quartine[3];
    fout << "---";
    fout << " RA: ";
    fout << ritardi[1];
    fout << "---";
    fout << " RS: ";
    fout << ritardi[0];
    //fout << "\n";
    
    fout.close();
    
    }
    
    
    cout << "fine elaborazione";
    
    cin.get();
    Dunque ... lo stesso prg se procede molto + lentamente con qualche cout (mostra a video) in più riesce a salvarmi ogni riga di report (una ogni 3 min ca) nel file txt corrispondente...

    Mentre se tolgo tutti i cout... l'elaborazione diventa velocissima ma in compenso nel file .txt
    non vengono salvati tutti i dati... ma solo le prime 3 righe (in un nanosecondo!) (in modo regolare)

    es:

    1,2,3,4--- RA: 68--- RS: 219

    1,2,3,5--- RA: 68--- RS: 315

    1,2,3,6--- RA: 68--- RS: 349


    Qualcuno/a saprebbe dirmi come mai il mio programma mi mostra a video fine elaborazione...
    dopo pochi sec. ma non mi salva tutto nel file anche se ho messo fout.close()?

    E' come se il file si chiudesse... troppo presto... (ho provato anche a togliere fout.close() ma non salva tutto ugualmente...)

    Grazie infinite!



  2. #2
    se fout è un oggetto fstream (perchè non postate il codice di tutte le classi che definite ed usate ), devi usare la funzione flush() per svuotare il buffer di scrittura prima di chiuderlo con close()

  3. #3
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Provato.. ma stesso risultato :-(

    Originariamente inviato da lolide
    se fout è un oggetto fstream (perchè non postate il codice di tutte le classi che definite ed usate ), devi usare la funzione flush() per svuotare il buffer di scrittura prima di chiuderlo con close()
    In cima comunque ho:

    codice:
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <sstream>
    #include <iomanip>
    Provato a mettere flush();

    in queste due posizioni...

    codice:
    if (ritardi.size() !=0) {
    //cout << "\n\n Sto salvando in file txt ... \n\n";                   
    fout << quartine[0];
    fout << ",";
    fout << quartine[1];
    fout << ",";
    fout << quartine[2];
    fout << ",";
    fout << quartine[3];
    fout << "---";
    fout << " RA: ";
    fout << ritardi[1];
    fout << "---";
    fout << " RS: ";
    fout << ritardi[0];
    
    
    fout.flush();  //qui...
    
    }
    
    
    fout.flush(); //o qui...
    
    fout.close();



  4. #4
    Quindi ?
    Funziona o no ?

  5. #5
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    Originariamente inviato da lolide
    Quindi ?
    Funziona o no ?
    l'avevo messo nel titolo

    "Provato.. ma stesso risultato :-( "


  6. #6
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Scusa ma il codice della scrittura su file, é racchiuso in un loop??? Usi devcpp???
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  7. #7
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    si ad entrambe le domande :)

    Originariamente inviato da KrOW
    Scusa ma il codice della scrittura su file, é racchiuso in un loop??? Usi devcpp???
    si

    codice:
    if (ritardi.size() !=0) {
    
    cout << "\n\n Sto salvando in file txt ... \n\n";                   
    fout << quartine[0] << flush;;
    fout << ",";
    fout << quartine[1] << flush;;
    fout << ",";
    fout << quartine[2] << flush;;
    fout << ",";
    fout << quartine[3] << flush;;
    fout << "---";
    fout << " RA: ";
    fout << ritardi[1] << flush;;
    fout << "---";
    fout << " RS: ";
    fout << ritardi[0] << flush;;
    
    fout.flush();
    }
    
    //questo è racchiuso in un loop che dovrebbe scrivere nel file un sacco di righe...  
    //per un sacco di quartine diverse... (invece mi scrive solo le prime 3 :-| )
    si

    uso devcpp


  8. #8
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    intanto ti consiglio di cambiare IDE/compilatore (ho perso il conto di quante volte é stata detta questa frase in riferimento al devcpp) ... Poi, potresti postare tutto il codice relativo alla scrittura su file (apertura, loop ecc...)???
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  9. #9
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Per il primo consiglio per adesso no :) per il secondo... eccolo per intero...

    Originariamente inviato da KrOW
    intanto ti consiglio di cambiare IDE/compilatore (ho perso il conto di quante volte é stata detta questa frase in riferimento al devcpp) ... Poi, potresti postare tutto il codice relativo alla scrittura su file (apertura, loop ecc...)???
    codice:
    
    // reading a complete binary file
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <sstream>
    #include <iomanip>
    
    using namespace std;
    
    ifstream::pos_type size;
    char * memblock;
    char * memblock2;
    char * memblock3;
    
    string intToString(char value) {
    stringstream ss;
    ss << value;
    return ss.str();
    }
    
    int stoint( const std::string &text )
    {
    	std::stringstream sstream;
    	sstream << text;
    
    	int integer;
    	sstream >> integer;
    
    	return integer;
    }
    
    
    int main () {
        
    
    //APERTURA FILE TXT 
                       
    ofstream fout;
    fout.open("ritardi-quartine-senza-cout.txt", ios::app);      
    
    //---------------------------------------------------
        
    vector<string>token;
    string valorestringa =""; 
    string stringaquartina;
    string stringaestrazione;
    vector <string> compara;
    int ritardo;
    vector <int> ritardi(2);
    int n;
    n=0;
    string stringaquartinasingola="";
    string stringaestrazionesingola="";
    string testo,estratta;
    vector<string> token1;
    vector<string> token2;
    int inizio,fine,i,lparola;
    bool continua;
    testo = stringaestrazione;
    stringaquartinasingola="";
    vector<string> estrazioni;
    vector<string> quartine;
    vector<string> confronta;
    vector<int> confrontainteri;
    
    int occorrenza=0;
    
    ritardo=0; 
    
    int g=0;
    
    
    ifstream file2 ("estrazioni.txt", ios::in|ios::binary|ios::ate);
    if (file2.is_open())
    {
    size = file2.tellg();
    memblock2 = new char [size];
    file2.seekg (0, ios::beg);
    file2.read (memblock2, size);
    file2.close();
    for (int i=0; i<size;i++) {
    //cout << memblock[i];
    valorestringa = intToString(memblock2[i]);
    stringaestrazione += valorestringa;
    }
    
    cout << "\n\n";
    cout << "carico estrazioni in memoria...";
    cout << "\n\n";
    
    cin.get();
    
    testo=stringaestrazione;
    continua = true;
    inizio = -1;	/*1*/
    while(continua){
    fine = testo.find(',',inizio+1);	/*2*/
    //fine = testo.find(',',inizio+1);
    // ultima parola
    if(fine==-1){	/*3*/
    continua = false;
    fine = testo.length();	/*4*/
    }
    // Estrazione parola
    lparola = (fine-inizio)-1;	/*5*/
    estratta = testo.substr(inizio+1,lparola);	/*6*/
    token1.push_back(estratta);	/*7*/
    inizio = fine;	/*8*/
    }
    }
    
    cout << "\n\n";
    
    
    cout << "\n\n";
    
    
    ifstream file3 ("quartine.txt", ios::in|ios::binary|ios::ate);
    if (file3.is_open())
    {
    size = file3.tellg();
    memblock3 = new char [size];
    file3.seekg (0, ios::beg);
    file3.read (memblock3, size);
    file3.close();
    for (int i=0; i<size;i++) {
    
    valorestringa = intToString(memblock3[i]);
    stringaquartina += valorestringa;
    }
    cout << "\n\n";
    cout << "carico quartine in memoria...";
    cout << "\n\n";
    
    cin.get();
    
    
    cout << "Inizio elaborazione...";
    
    testo=stringaquartina;
    continua = true;
    inizio = -1;	/*1*/
    while(continua){
    fine = testo.find(',',inizio+1);	/*2*/
    // ultima parola
    if(fine==-1){	/*3*/
    continua = false;
    fine = testo.length();	/*4*/
    }
    // Estrazione parola
    lparola = (fine-inizio)-1;	/*5*/
    estratta = testo.substr(inizio+1,lparola);	/*6*/
    token2.push_back(estratta);	/*7*/
    inizio = fine;	/*8*/
    }
    }
    
    
    for (int a=0; a< token2.size(); a++) {
    
    if (a%4==0) {
    
    quartine.clear();
    confronta.clear();
    confrontainteri.clear();
    
    }            
                
    
    quartine.push_back(token2[a]);
    
    
    if (quartine.size()==4) {
    
    for (int y=0; y<quartine.size(); y++) {
        
    
    for (int a=0; a< token1.size(); a++) {
    
    if (a%5==0) {
    
    estrazioni.clear();
    confronta.clear();
    confrontainteri.clear();
    
    }            
    
    estrazioni.push_back(token1[a]);
    
    if (estrazioni.size()==5) {
    
    
    estrazioni[0].replace(0, 2, "");
    
    confronta.push_back(estrazioni[0]);
    confronta.push_back(estrazioni[1]);
    confronta.push_back(estrazioni[2]);
    confronta.push_back(estrazioni[3]);
    confronta.push_back(estrazioni[4]);
    confronta.push_back(quartine[0]);
    confronta.push_back(quartine[1]);
    confronta.push_back(quartine[2]);
    confronta.push_back(quartine[3]);
    
    for (int j=0; j<confronta.size(); j++) {
    
    
    int confrontaintero = stoint(confronta[j]);
    confrontainteri.push_back(confrontaintero);
    
    }
    cout << "\n\n";
    
    
    int contadoppioni=0;
    sort(confrontainteri.begin(),confrontainteri.end());
    
    int MISURAVECTOR;
    MISURAVECTOR=confrontainteri.size();
    
    
      for (int i = 0; i < MISURAVECTOR-1; i++) {
      
    
        if (confrontainteri[i] == confrontainteri[i+1]) {
        contadoppioni++;
    
        }
        else {
    
        }
    
    }
    
    if (contadoppioni==1) {                  
    ritardo++;
    if (ritardo > ritardi[0]) { 
    ritardi[0]=ritardo;
    }            
    ritardi[1]=ritardo;
    
    }
    
    else if (contadoppioni==2) {                  
    
    ritardo=0;
    ritardi[1]=ritardo;
    
    }
    
    else if (contadoppioni>=3) {                  
    
    ritardo=0;
    ritardi[1]=ritardo;
    
    }
    
    else  {                  
    
    ritardo++;
    if (ritardo > ritardi[0]) { 
    ritardi[0]=ritardo;
    }
    ritardi[1]=ritardo;
    
    }    
    
    }
    
    for (int y=0; y<estrazioni.size(); y++) {
    
    }
    
    for (int y=0; y<quartine.size(); y++) {
    
    }
    
    }
    
    if (ritardi.size() !=0) {
    
    //SCRITTURA FILE TXT 
                      
    fout << quartine[0] << flush;;
    fout << ",";
    fout << quartine[1] << flush;;
    fout << ",";
    fout << quartine[2] << flush;;
    fout << ",";
    fout << quartine[3] << flush;;
    fout << "---";
    fout << " RA: ";
    fout << ritardi[1] << flush;;
    fout << "---";
    fout << " RS: ";
    fout << ritardi[0] << flush;;
    
    //---------------------------------------------------
    
    }
    
    ritardi[0]=0;
    ritardi[1]=0;
    
    quartine.clear();
    confronta.clear();
    confrontainteri.clear();
    ritardo=0;
    
    }
    }
    }
    
    //CHIUSURA FILE TXT 
    
    fout.close();
    
    //---------------------------------------------------
    
    cout << "fine elaborazione";
    cin.get();
    
    }
    Grazie

    Ciao


  10. #10
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Scusa ma il codice é un po troppo per poterlo elaborare (considera che non ho davanti un computer) ... Prova a determinare se effettivamente il vettore ritardi viene riempito secondo il comportamento stabilito ...
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.