I/O da file binario

di
Anonimizzato10392
il
3 risposte

I/O da file binario

Ciao a tutti.
Sono nuovo di questo forum.
Dunque, credo siano d'obbligo le presentazioni:
Mi chiamo "ozzy84" e frequento il CDL in fisica.
Tra i vari corsi, abbiamo anche un corso di c++. Ecco il perchè mi trovo su questo forum

Dunque, il mio problema è questo:

Parto dal presupposto che, non ho esperienza di programmazione, vi chiedo molta pazienza nell'interpretare il mio linguaggio (sia il mio linguaggio poco "settoriale" inerente al c++ , che il linguaggio c++ stesso) e vi chiedo inoltre molta chiarezza e abbondanti commenti nelle righe di codice che mi proporrete. (Non voglio assolutamente fare il "noioso", sono sicuro però che, quello che voi date a volte per scontato, per me non lo sarà affatto.)

Concluso questo preambolo, e ringraziotovi per il tempo dedicato alla lettura e nell'aiutarmi, vi pongo il quesito vero e proprio.

Ci è stato chiesto, avendo un file esterno formattato in questa maniera:

a b c
a' b' c'
a'' b'' c''
. . .
. . .
. . .

di estrapolare i dati a b c, a' b' c' , a'' b'' c'' ecc.. ecc... e di metterli rispettivamente in 3 array differenti per poi farci un' analisi. I dati sono di tipo double
Tralasciando la parte dell'analisi mi interesserebbe sapere questo.

Vi mostro la parte interessata del mio codice:


#include <iostream>
#include <fstream>
using namespace std;


int main()
{

double * arrayTotale;
double * arrayX;
double * arrayY;
double * arrayDy;
ifstream file ("dati");
double appoggio;
int n=0;
 do {
          file >> appoggio; 
          n++;
       }
    while (!(file . eof())); 
    n--;

//questo ciclo mi conteggia i dati presenti dentro al file "dati". Ho trovato l'operatore >> è molto utile nel mio caso, in quanto non tiene conto degli spazi e delle andate a capo 

//Ora metto tutti i dati dentro all'arrayTotale e poi li divido nei 3 array: arrayX , arrayY , arrayDy

arrayTotale = new double[n];
arrayX = new double[n/3];
arrayY = new double[n/3];
arrayDy = new double[n/3];
file.seekg (0, ios::beg); 

for (int i=0; i < n; i++) 

	{ 
	file >> arrayTotale[i];

	} 
int j=0;
int k=0;
		do
		{
			arrayX[j] = arrayTotale[k];
			j++;
			k++;
			k++;
			k++;
		}
			while (j< n/3);
int f=0;
int g=1;
		do
		{
			

			arrayY[f] = arrayTotale[g];
			f++;
			g++;
			g++;
			g++;
			

		}
			while (f< n/3);
int d=0;
int h=2;
		do
		{
			

			arrayDy[d] = arrayTotale[h];
			d++;
			h++;
			h++;
			h++;
			

		}
			while (d< n/3);


Ecco qua, sono convinto che sia abominevole e con un'estetica raccapricciante, sono anche convinto che sarebbe bastato un unico ciclo for per riempire i tre array.
Il mio problema è questo però.
Presentato il codice al prof., mi sono sentito dire: "il codice funziona, ma legge solo file formattati ascii" ....................................................
"Avevo richiesto esplicitamente che venisse letto un file binario" .......................................

Qualcuno può farmi un po' di chiarezza sui file binari?
Il prof ha detto che con i file binari non c'è bisogno di un ciclo per dimensionare gli array.
Come faccio?
Riassumendo, come faccio a creare un codice che faccia la stessa cosa del mio, però con i file binari?
Potreste farmi qualche esempio commentato?

Per concludere, come faccio a crearmi un file binario per fare delle prove?


Un ringraziamento sentito a tutti.
Aspetto vostre notizie.

Grazie!

3 Risposte

  • Re: I/O da file binario

    Il tuo codice si è da migliorare e di molto ma cmq è già un buon inizio.
    Intanto ti mando un link dove viene spiegato come leggere/scrivere dei double in formato binario su file. Vedi se riesci a ricavarci qualcosa.
    http://www.java2s.com/Tutorial/Cpp/0240__File-Stream/Saveandreaddoublearrayinabinaryfile.htm
  • Re: I/O da file binario

    Ciao Skynet.
    Ti ringrazio per la tua risposta così celere.
    Ho dato una sbirciata veloce al link e mi sembra che ci sia tutto!
    domani mi ci metto dietro, se ho dei problemi ti faccio sapere.
    grazie ancora per la disponibilità!


    Ciao!
  • Re: I/O da file binario

    Perfetto!
    Ottima pagina!
    Ho risolto tutti i miei problemi!
    Grazie mille ancora!
Devi accedere o registrarti per scrivere nel forum
3 risposte