如何拆分文件?
How can I split a file?
我正在尝试拆分文件的代码
#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
问题是作用域和变量阴影的问题。
您在函数范围内有一个名为 OUT
的变量,它在写入循环之前定义。然后在 if
中定义一个 new 和完全不同的变量 OUT
。当块的范围结束时,新变量的生命周期也结束,并且它被破坏。
您不应该定义新变量,而是重新打开现有文件:
if((AUX1[i+1]-AUX1[i])>50.){
k++;
number=to_string(k);
OUT.close();
OUT.open(number+file); // Open the new file
}
所有大型编译器都应该能够检测到变量阴影并发出警告。如果您没有收到这样的警告,那么您需要启用更多警告(我建议 -Wall -Wextra -Wpedantic
用于 GCC 和 Clang,/W4
用于 VC++)。
我正在尝试拆分文件的代码
#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
问题是作用域和变量阴影的问题。
您在函数范围内有一个名为 OUT
的变量,它在写入循环之前定义。然后在 if
中定义一个 new 和完全不同的变量 OUT
。当块的范围结束时,新变量的生命周期也结束,并且它被破坏。
您不应该定义新变量,而是重新打开现有文件:
if((AUX1[i+1]-AUX1[i])>50.){
k++;
number=to_string(k);
OUT.close();
OUT.open(number+file); // Open the new file
}
所有大型编译器都应该能够检测到变量阴影并发出警告。如果您没有收到这样的警告,那么您需要启用更多警告(我建议 -Wall -Wextra -Wpedantic
用于 GCC 和 Clang,/W4
用于 VC++)。