Разделение больших файлов CSV на маленькие файлы с именами Dynami c с использованием C ++ - PullRequest
0 голосов
/ 18 апреля 2020

Я новичок, поэтому прошу прощения, если мой вопрос выглядит детским sh. У меня 38 больших файлов в папке. Я хочу разбить каждый из файлов на более мелкие части с именем Dynami c. Строка с 1 по 13 работает хорошо. Задача в строке 16-19. Вывод показывает, что все данные из ifstream не отображаются как char. Эта ошибка затрудняет разделение файлов. Пожалуйста, что я делаю не так

 #define SEGMENT 728300 //approximate target size of small file
    using namespace std;
    long file_size(char *name);//function definition below

    int main(int argc, char **argv)
    {
        char input_file_1[100];   // input file
        strcpy(input_file_1,argv[1]);

        string PathToData = "path to the files";

          TString name = PathToData+input_file_1;
          std::cout << "Reading file  " << name << endl;
         char getdata[35000];
        ifstream csv_db(name);

        while(csv_db.getline(getdata,sizeof(csv_db)))

            if (csv_db.eof())


        csv_db.close();

        int segments=0, i, accum;
        FILE *fp1, *fp2;

        unsigned int huga=strlen(getdata);
        char largeFileName[huga + 100];  // Make sure there's enough space
        strcpy(largeFileName, getdata);
        std::cout << largeFileName << endl;


        std::cout << largeFileName << endl;
        long sizeFile = file_size(largeFileName);
        segments = sizeFile/SEGMENT + 1980;//ensure end of file
        char filename[360]={"path to folder where to keep the result"};     
        char smallFileName[360];
        char line[1080];

        fp1 = fopen(largeFileName, "r");
        if(fp1)
        {
            for(i=1980;i<segments;i++)
            {
                accum = 0;
                sprintf(smallFileName, "%s%d.csv", filename, i);
                fp2 = fopen(smallFileName, "w");
                if(fp2)
                {
                    while(fgets(line, 1080, fp1) && accum <= SEGMENT)
                    {
                        accum += strlen(line);//track size of growing file
                        fputs(line, fp2);
                    }
                    fclose(fp2);
                }
            }
            fclose(fp1);

        }
        return 0;
    }

    long file_size(char *name)
    {
        FILE *fp = fopen(name, "rb"); //must be binary read to get bytes

        long size=-1;
        if(fp)
        {
            fseek (fp, 0, SEEK_END);
            size = ftell(fp)+1;
            fclose(fp);
        }
        return size;
    }
...