C++读取txt文件 或 输出到txt文件
在工作中我们经常遇到程序从txt文件读取数据,特别的我们需要将以空格或逗号隔开的数据一行行地读取。下面介绍用代码介绍读取过程。
#include <fstream>
#include <string>
#include <stdlib>
#include <iostream>
#include <sstream>
#include <vector>
#include <io.h>
using namespace std;
#define MAX_ARR_LEN 2048
#define NUM_FILE 2
int Read_TXT_file(const char* filename, int* dataA, int* dataB)
{
std::ifstream file(filename, std::ios::in);
if(!file.is_open())
{
perror("Error: open file failure!!!\n");
system("pause");
return 0;
}
int k = 0;
std::string line;
bool firstline = true;
while(getline(file, line)){
if(firstline){
firstline = false;
continue;
}
std::vector<std::string> data;
std::stringstream ss(line);
std::string token;
while(std::getline(ss, token, ','))
{
data.push_back(token);
}
dataA[k] = strtoul(data[0].c_str(), NULL, 10);
dataB[k] = strtoul(data[1].c_str(), NULL, 16);
k++
}
file.close();
return k;
}
int main()
{
std::string outfile_name = "output.txt";
if(_access(outfile_name.c_str(), 0) == 0)
remove(outfile_name.c_str());
std::ofstream outfile(outfile_name.c_str(), std::ios::app);
if(!outfile.is_open())
{
perror("Error: open write file failure!!!\n);
system("pause");
return 0;
}
for(int i = 0; i < NUM_FILE; i++)
{
std::string filename = "./file_";
filename += '0' + i;
fileanme += ".txt";
int* dataA = new int[MAX_ARR_LEN];
int* dataB = new int[MAX_ARR_LEN];
int read_arr_num = Read_TXT_file(filename.c_str(), dataA, dataB);
...
outfile << dataA[0] << ", " << dataB[0] << std::endl;
delete[] dataA;
delete[] dataB;
}
outfile.close();
system("pause");
return 0;
}
重点:
- 按逗号分隔一行文本:while(std::getline(ss, token, ‘,’));按空格分隔一行文本:while(ss >> token);
- 将字符串转化为数字:strtol (int32), strtoul (uint32), strtoll (int64), strtoull (uint64);
- 写出文件查看文件是否已经存在,如存在则删除:见_access(), remove();
- 输入文本如需要用空格隔开,注意使用双引号:“, ”。
|