繁体   English   中英

c ++从具有数组属性的文件中读取对象

[英]c++ read object from file with array attribute

我有一个类,我想将对象读入一个对象数组,但我的类的属性有问题(长数据 [4];)。 我不知道我怎么读它。 在读取方法中,我想从文件中读取所有属性,并创建一个数据元素向量并将构造函数附加到从文件中读取的向量中。

//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];

如果您的data是固定的并且长度始终为 4,您可以在fscanf模式中重复%ldlong格式说明符)四次。

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

如果它不是固定长度,您应该首先读取它的长度,然后使用循环fscanf它的条目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM