Как я могу разбить файл? - PullRequest
       9

Как я могу разбить файл?

0 голосов
/ 05 апреля 2020

Я пытался код для разделения файла

#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;

int main()
{
int dim,k=1;
double x,y,x1,y1;
vector<double> AUX1[0],AUX2[0];
string file="ne_1417.dat",number; 
ifstream IN(file);
while(IN >> x >> y)
{
    AUX1.push_back(x);
    AUX2.push_back(y);
}
IN.close(); 
dim=AUX1.size();
number=to_string(k);
ofstream OUT(number+file);
for(int i=0;i<dim;i++)
{
    OUT<<AUX1[i]<<" "<<AUX2[i]<<endl;   
    if((AUX1[i+1]-AUX1[i])>50.){
         k++;
        number=to_string(k);
        OUT.close();        
        ofstream OUT(number+file);
    }
}

return 0;
}

Я получаю количество файлов, которые я хочу, но только первый файл заполнен данными, остальные пустые, и я не могу понять, почему = (Мне нужна помощь, пожалуйста, <3 </p>

1 Ответ

0 голосов
/ 05 апреля 2020

Проблема связана с областью видимости и изменением теней.

В области действия функции есть переменная с именем OUT, определенная до записи l oop. Затем внутри if вы определяете new и совершенно другую переменную с именем OUT. Когда заканчивается область действия блока, то же время жизни новой переменной и она уничтожается.

Вы не должны определять новую переменную, а скорее открывать существующую file:

if((AUX1[i+1]-AUX1[i])>50.){
     k++;
    number=to_string(k);
    OUT.close();        
    OUT.open(number+file);  // Open the new file
}

Все крупные компиляторы должны уметь обнаруживать переменную shadowing и выдавать предупреждения об этом. Если вы не получили такого предупреждения, вам нужно включить больше предупреждений (я рекомендую -Wall -Wextra -Wpedantic для G CC и Clang и /W4 для VC ++).

...