.txt .exe .txt e funzione sprintf

di il
27 risposte

27 Risposte - Pagina 2

  • Re: .txt .exe .txt e funzione sprintf

    Ma il file che leggi è di testo o binario?

    Hai provato a fare una stampa della riga letta dal file di input, prima di metterla nel buffer?
  • Re: .txt .exe .txt e funzione sprintf

    E' di testo. E' una poesia per la precisione.I numeri vanno bene sono esattamente nel numero e nel formato che desidero ma il resto non corrisponde al testo che vorrei esportare da un file di testo e importarlo in un altro, appunto quello indicato da f.
  • Re: .txt .exe .txt e funzione sprintf

    Prova a stampare le righe senza nessuna manipolazione, vedi se le legge correttamente dal file.
  • Re: .txt .exe .txt e funzione sprintf

    Hm, questa prova credevo di averla fatta stampando con il printf, come descritto sopra. Non è cosiì che intendi?
  • Re: .txt .exe .txt e funzione sprintf

    Questo da problemi!
    
    while ( !in.eof() ){
       rowNumber++;
       in.getline(buffer, 200);
       sprintf (buffer, "%03d %s\n", rowNumber);
       printf ("%03d %s\n", rowNumber, buffer);
       f << buffer << endl;
    }

    Questo è ok!
    
    while ( !in.eof() ){
       rowNumber++;
       in.getline(buffer, 200);
       printf ("%03d %s\n", rowNumber, buffer);
    }
    Giusto?
  • Re: .txt .exe .txt e funzione sprintf

    Esatto!
  • Re: .txt .exe .txt e funzione sprintf

    Ma certo!

    Allora il problema sta in questo punto:
    
    while ( !in.eof() ){
       rowNumber++;
       in.getline(buffer, 200);
       sprintf (buffer, "%03d %s\n", rowNumber); // Qui ci sta il problema
       printf ("%03d %s\n", rowNumber, buffer);
       f << buffer << endl;
    }
    
    Quando usi la sprintf il buffer lo sovrascrivi con il valore nel formato segnato con rowNumber.

    Dovresti dichiarare un bufferUno e scrivere nel bufferUno così:
    while ( !in.eof() ){
       rowNumber++;
       in.getline(buffer, 200);
       sprintf (bufferUno, "%03d %s\n", rowNumber, buffer); // Qui ci sta il problema
       printf ("%s\n", bufferUno);
       f << bufferUno << endl;
    }
    Così dovrebbe funzioare, fammi sapere.
  • Re: .txt .exe .txt e funzione sprintf

    E' fatta! Era quello il problema. Grande SVNiko. Mille grazie per l'aiuto
  • Re: .txt .exe .txt e funzione sprintf

    Semmai deve essere
    
    while ( !in.eof() ) 
    	{
    		rowNumber++;
    		in.getline(row, 200); 
    		sprintf (buffer, "%03d %s", rowNumber, row);
    		printf ("%s\n", buffer);
    		f << buffer << endl;
    	}
    
    e ovviamente immagino tu abbia dichiarato buffer prima di questo ciclo ...
  • Re: .txt .exe .txt e funzione sprintf

    Il tuo row è il bufferUno ... bastava buffer ... il \n non ci vuole nella sprintf ...
  • Re: .txt .exe .txt e funzione sprintf

    Grazie oregon per questo ulteriore affinamento. Effettivamente così è proprio perfetto. Il programma gira quindi ed è tutto come mi era stato commissionato. Devo ammettere pero SVNiko di non aver ben capito cosa intendevi con:

    SVNiko ha scritto:



    Quando usi la sprintf il buffer lo sovrascrivi con il valore nel formato segnato con rowNumber.

    .
    Potresti gentilmente chiarirmi questo concetto?
  • Re: .txt .exe .txt e funzione sprintf

    Questo è il codice che avevi postato, dicendo che aveva problemi.
    
    while ( !in.eof() ){
       rowNumber++;
       in.getline(buffer, 200);
       sprintf (buffer, "%03d %s\n", rowNumber);
       printf ("%03d %s\n", rowNumber, buffer);
       f << buffer << endl;
    }
    Attenendomi semplicemente a questo codice, ho notato questo:

    1) leggi dal file e metti la riga letta in una stringa chiamata buffer ( prima era row (come scrive oregon) )
    2) usando la sprintf metti nella stessa stringa buffer un numero intero (secondo il formato %03d %s\n" (tra l'altro errato, perchè manca la stringa)); così facendo sovrascrivi il cotenuto di buffer.

    Tutto qui!
    Il tuo row è il bufferUno ... bastava buffer ... il \n non ci vuole nella sprintf ...
    Attenendomi al suo codice ho suggerito un bufferUno, proprio perchè aveva usato buffer e non più row.

    Certo la sprintf non ha bisogno di "\n", onestamente non ci ho immediatamente fatto caso, ma cut and paste. Ad ogni modo il "\n" è comunque un carattere, che sarà inserito in buffer prima di \0, esso sortirà l'effetto di un doppio a capo, sgradito o no dipende dalla formattazione che vuole avere.

    Spero aver chiarito in maniera esaustiva!
  • Re: .txt .exe .txt e funzione sprintf

    Chiarissimo! Ero talmente concentrato sulla sprintf che non mi ero accorto che getline immagazzinava nello stesso array dove avrei poi dovuto importare i dati
    Riguardo \n effettivamente le specifiche non richiedevano un doppio a capo quindi meglio senza.

    Grazie ancora per le risposte
Devi accedere o registrarti per scrivere nel forum
27 risposte