本文使用C++模板类实现对二进制文件的操作(注:因为模板类分离编译,所以只能将实现也放在头文件中):
1、概要:
(1)文件格式:存二进制格式,文件内的数据使用空格或者逗号分隔开;
(2)数据保存形式:使用c++二维容器进行保存;
(3)数据类型:主要包括3种:字符型、数字、字符串;
2、使用:
(1)运行环境:Linux,G++ 4.9.2;
(2)数据输入:将数据保存在./inDir/filename文件中,其中filename在程序调用的时候指定;
(3)数据输出:运行结果保存在./outDir/result.out文件中;
(4)使用方式:直接复制Myfile.h到程序路径下,include就行;
3、操作:主要包括获取文件数据,增、删、查、改
Myfile(string filename); //构造函数
void addData(int row, int col, valueType data); //添加一个元素
void addRowData(int row, t_vec data); //添加一行元素
void addColData(int col, t_vec data); //添加一列元素
void eraseData(int row, int col); //删除一个元素
void eraseRowData(int row); //删除一行元素
void eraseColData(int col); //删除一列元素
void alterData(int row, int col, valueType data); //修改一个元素
void alterRowData(int row, t_vec data); //修改一行元素
void alterColData(int col, t_vec data); //修改一列元素
valueType getData(int row, int col); //根据位置返回数据
t_vec getRowData(int row); //返回第row行的数据
t_vec getColData(int col); //返回第col行的数据
int getElementCount(valueType data); //获取文件中值为data的个数
void printData(); //打印数据
void processFile(); //将文件处理成标准格式:首尾无空格,中间以空格隔开
t_t_vec getFileData(){return fileData;}//返回文件数据
int getRowNum(); //获取行号
vector<int> getColNum(); //获取列号
4、模板类定义:
template <typename T> class Myfile
{
public:
typedef T valueType;
typedef vector<valueType> t_vec; //类型为valueType的容器
typedef vector<t_vec> t_t_vec; //类型为valueType的二维容器
typedef typename vector<valueType>::iterator t_vec_iter; //第一个容器的迭代器
typedef typename vector<t_vec>::iterator t_t_vec_iter; //二维容器的迭代器
Myfile(string filename); //构造函数
void addData(int row, int col, valueType data); //添加一个元素
void addRowData(int row, t_vec data); //添加一行元素
void addColData(int col, t_vec data); //添加一列元素
void eraseData(int row, int col); //删除一个元素
void eraseRowData(int row); //删除一行元素
void eraseColData(int col); //删除一列元素
void alterData(int row, int col, valueType data); //修改一个元素
void alterRowData(int row, t_vec data); //修改一行元素
void alterColData(int col, t_vec data); //修改一列元素
valueType getData(int row, int col); //根据位置返回数据
t_vec getRowData(int row); //返回第row行的数据
t_vec getColData(int col); //返回第col行的数据
int getElementCount(valueType data); //获取文件中值为data的个数
void printData(); //打印数据
void processFile(); //将文件处理成标准格式:首尾无空格,中间以空格隔开
t_t_vec getFileData(){return fileData;}//返回文件数据
int getRowNum(){return rowNum;}
vector<int> getColNum(){return colNum;}
private:
string fileName; //待操作文件的文件名
t_t_vec fileData; //文件中的数据
int rowNum; //行数
vector<int> colNum; //保存列数的容器
void setRowColNum();
void readFile(); //读取文件中所有的数据
};
5、程序源代码:http://download.csdn.net/detail/fengjiajun169/8368747