记录以文件方式读取数据。
如从文件Data.txt中读取数据,文件内容如下:
0 0
3 8
2 2
1 1
5 3
4 8
6 3
5 4
6 4
7 5
思路:先通过文件的行数,得到样本个数,再建立动态数组,逐个读取数据。
变量定义:
#define MAX_SAMPLE_NUM 100 // 最大样本个数
double **SAMPLE; // 样本集
int SAMPLE_NUM = 0; // 样本个数
int NUMBER = 2; // 维数
// 获取文件的行数
int countLines(char *filename)
{
ifstream File;
int n = 0;
string temp;
File.open(filename, ios::in); //ios::in 表示以只读的方式读取文件
if (File.fail()) //文件打开失败:返回0
{
return 0;
}
else //文件存在,返回文件行数
{
while (getline(File, temp))
{
n++;
}
return n;
}
File.close();
}
// 文本读取训练样本
void loadSample(char *filename)
{
SAMPLE_NUM = countLines(filename); //获取行数
string temp;
int i, j;
SAMPLE = new double*[SAMPLE_NUM];
for (i = 0; i<SAMPLE_NUM; i++)
{
SAMPLE[i] = new double[NUMBER];
}
ifstream file;
file.open(filename, ios::in); //ios::in 表示以只读的方式读取文件
if (file.fail()) //文件打开失败
{
cout << "Can't open file!\n";
return;
}
cout << "从" << filename << "读取数据成功!\n";
for (i = 0; i < SAMPLE_NUM; i++)
{
for (j = 0; j < NUMBER; j++)
{
file >> SAMPLE[i][j];
}
}
file.close();
}
操作文件时,要声明#include <fstream>,用ifstream输入流读取文件,用ofstream输出流写入文件。