1.从txt中读取数据,数据类型为float,下面的代码失败的例子
void getme(){
long int number=0;
ifstream ifile; //说明输入文件流对象ifile
ofstream ofile; //说明输出文件流对象ofile
float a=0;
int count=0;
ifile.open( "trainData.txt" );//训练集
ofile.open("b.txt");
int len=375;//txt有375个数据,共有5列,75行,需要将前四列读取在一起来,最后一列单独读取出来
int i=0,j=0;
vector<vector <float> >test(75,vector<float>(4));//存放前四列
int trainL[75];//存放最后一列在数组当中
while(len--){
ifile>>a; //由文件读入数据
count++; //数据间是tab键隔开的,一行当中有五个数据
number++;
if(count<5)//当遇到前四个数据时,将数据存入向量中
{
cout<<a<<"\t";//输出与txt中的数据相同
test[i][j]=a;//赋值失败失败失败,向量值输出还是0,当把test换成数组时,也不能正常赋值,没有值
j++;
cout<<test[i][j]<<"\t";
}
/*将 读取的数据写入到b.txt文件中,五个为一行
if(len%5==0)
ofile<<a<<endl;
else ofile<<a<<"\t";*/
else {//当遇到第五个数据时候,存入数组中
trainL[i]=(int)a;
cout<<trainL[i]<<endl;
count=0;
i++;
j=0;
}
if(ofile.eof()!=0) break; //当读到文件结束时,ifile.eof()为真
}
ifile.close();
ofile.close();
cout<<"total numbers:"<<number<<endl;
}
这是trainData.txt前面几行的数据
这是没有正确赋值的结果。
2.同样是读取float数据,思想没有变,但是结果正确。
#include<iostream>
#include<fstream>
#include<sstream>
#include<cmath>
#include<cstdlib>
#include<vector>
using namespace std;
void test(vector< vector<float> >&trainData,vector<int> &trainL){
cout << "-----------test----------- " << endl;
ifstream in("trainData.txt");
string line;
/*vector< vector<float> >trainData(75,vector<float>(5));
vector<int> trainL(75);*/
int count=0;
int i=0,j=0;
while (getline(in, line)){//获取文件的一行字符串到line中
stringstream ss(line);//初始化 法1
double x;
while (ss >> x){//每一行包含不同个数的数字
count++;
if(count<5)
{
trainData[i][j]=x;
//cout<<trainData[i][j]<<"\t";
j++;
}
else
{
trainL[i]=x;
// cout<<trainL[i]<<endl;
i++;
j=0;
count=0;
}
}
}
}
int main()
{
cout<<"data is"<<endl;
vector< vector<float> >trainData(75,vector<float>(4));
vector<int> trainL(75);
test(trainData,trainL);
for(int i=0;i<trainData.size();i++)
{
for(int j=0;j<trainData[i].size();j++)
cout<<trainData[i][j]<<"\t";
cout<<trainL[i]<<endl;
}
return 0;
}
输出的结果与txt中的一致: