2017-12-27 1 views
-3

Ich habe eine Klasse und ich möchte Objekte in ein Array von Objekten lesen, aber ich habe ein Problem mit einem Attribut meiner Klasse (lange Daten [4];). Ich weiß nicht, wie ich es lesen kann. In Read Method möchte ich alle Attribute aus Datei lesen und auch einen Vektor von Datenelementen erstellen und den Konstruktor mit dem Vektor anhängen, der aus der Datei gelesen wird.C++ Leseobjekt aus Datei mit Array-Attribut

//Class: 
class Utilitati{ 
    const int id; 
    float PretUtilitati; 
    char * NumeUtilitati; 
    int Numarachizitii; 
    long data[4]; --This is the problem(I dont know how can i read it) 


//Constructor: 
    Utilitati(float PretUtilitati, char * NumeUtilitati, int Numarachizitii, long data[]) :id(3){ 
     this->PretUtilitati = PretUtilitati; 
     this->NumeUtilitati = new char[strlen(NumeUtilitati) + 1]; 
     strcpy(this->NumeUtilitati, NumeUtilitati); 
     this->Numarachizitii = Numarachizitii; 
     for (int i = 0; i < Numarachizitii; i++) 
      this->data[i] = data[i]; 
    } 

Data must be a vector from file. 
//Read Method: 
void citireFisier(char *numeFisier, Utilitati ** vectUtilitati) 
{ 
    FILE* file = fopen(numeFisier, "r+"); 
    if (!file) 
     cout << "\nEroare citire!" << endl; 
    else 
    { 
     int contor = 0; 
     float PretUtilitati; 
     char NumeUtilitati[20]; 
     int Numarachizitii; 
     long data[4]; 

     while (!feof(file)) 
     { 
      fscanf(file, "%f%s%i%l", &PretUtilitati, &NumeUtilitati, &Numarachizitii, &data); 
      Utilitati* NewUtilitati = new Utilitati(PretUtilitati, NumeUtilitati, Numarachizitii,data); 
      vectUtilitati[contor++] = NewUtilitati; 
     } 
    } 
} 
The file has the next format: 
    100 //float PretUtilitati 
    Gaze //char * NumeUtilitati; 
    3  // int Numarachizitii; 
    20171012 //long data[0]; 
    20151012 ////long data[2]; 
    20011023 ///long data[Numarachizitii]; 

Antwort

0

Wenn Ihr data fixiert ist und immer mit einer Länge von 4 können Sie %ld (Formatbezeichner für long) viermal im fscanf Muster wiederholen.

fscanf(file, "%f%s%i%ld%ld%ld%ld", 
    &PretUtilitati, &NumeUtilitati, &Numarachizitii, 
    &data[0], &data[1], &data[2], &data[3]); 

Und wenn es Länge nicht festgelegt ist, lesen Sie bitte zuerst die Länge und dann in eine Schleife fscanf seine Eingaben mit.