I/O da file binario

di 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

Devi accedere o registrarti per scrivere nel forum
3 risposte