C++ 使用getline函数提取字符串数据,并使用ofstream函数将每一行写入单独的文件
我以txt格式存储的输入文件如下:C++ 使用getline函数提取字符串数据,并使用ofstream函数将每一行写入单独的文件,c++,c,C++,C,我以txt格式存储的输入文件如下: data1 : 15 16 20 23 56 data2 : 15 65 89 64 65 所以,我将每一行提取为字符串格式,并将其保存到一个单独的文件中,如下所示 宏定义: #define STRINGIFY_INIT(x) #x #define STRINGIFY(x) STRINGIFY_INIT(x) #define FILE_PREFIX data #define FILE_EXT .txt
data1 : 15 16 20 23 56
data2 : 15 65 89 64 65
所以,我将每一行提取为字符串格式,并将其保存到一个单独的文件中,如下所示
宏定义:
#define STRINGIFY_INIT(x) #x
#define STRINGIFY(x) STRINGIFY_INIT(x)
#define FILE_PREFIX data
#define FILE_EXT .txt
#define CONCAT_FILE(a) STRINGIFY(FILE_PREFIX) STRINGIFY(a) STRINGIFY(FILE_EXT)
代码的开头是这样的:
std::string line;
std::ifstream readfile;
readfile.open("read.txt");
while(getline(readfile,line)){
int x = 1;
std::ofstream outputFile( CONCAT_FILE(x) );
outputFile << line <<std::endl;
std::cout<<line<<std::endl;
x++;
}
但是,我的要求是创建两个名为data1.txt和data2.txt的文件,因为原始输入文件中有两行数据
我遇到的问题是:
std::ofstream outputFile( CONCAT_FILE(x) );
表达式“CONCAT_FILE(x)”没有取x的值,只是取ASCII字符“x”。因此,将创建一个名为“datax.txt”的文件,而不是“data1.txt”、“data2.txt”
我希望在第一次迭代中使用CONCAT_文件(1),在下一次迭代中使用CONCAT_文件(2),这样就创建了两个文件“data1.txt”、“data2.txt” 谁能帮我一下吗 我需要创建两个单独的文件,这样我就可以单独读取整数值,并希望计算每个整数值的平均值 请把需要的全部做完。
谢谢,为什么要将其标记为C?问题在于宏表达式“CONCAT_FILE(x)”,我正在尝试将数字(x的值)附加到文件名。宏,我想C和C++中都是一样的。你需要一个方法把整数转换成一个字符串,用作文件名,这是很小的,可以找到解决方案。预处理器仅仅是一个文本替换工具,它甚至不知道诸如
int
或float
之类的类型。我希望在第一次迭代中使用CONCAT_文件(1),在下一次迭代中使用CONCAT_文件(2),这样就可以创建两个文件“data1.txt”,“data2.txt”。去掉所有这些宏并使用。那么你的代码就可以工作了。宏用于编译时文本替换–它们不能在运行时使用变量的值。
std::ofstream outputFile( CONCAT_FILE(x) );