最近在做一个实时控制的神经网络。我的数据是存在.txt中的,共6个vaiables,7000多组数据,形似下面:
1.02 1.35 2.03 0.32 0.41 1.05
1.35 1.21 1.98 0.41 0.58 1.11
...
0.98 1.12 1.75 0.56 0.87 0.99 //7000多行数据!我用网上搜来的代码来读取这些数据: CFile file("ttp.txt",CFile::modeRead);

char *pBuf;
int iLen=file.GetLength();
int irow=iLen/13;
pBuf =new char[iLen+1];
file.Read(pBuf,iLen);
pBuf[iLen]=0;

file.Close();
        cout<<pBuf<<endl;
cout<<irow<<endl;读取成功。不过,却是从中间某行开始的,其前面的数据没有读入!这是怎么回事?另外,因为我这个是实时控制的,所以一个现象就是,每个训练set都是上面数据的第i行为input,第i+1行为target。也就是说,第i行为t时刻的output数据,同时在t+1时刻作为input数据。
我这里有两个模板类:Vector<type>和Matrix<type>。我从txt中读取的数据想直接读入一个Matrix<double>的对象中,该怎么做?高手请入!!

解决方案 »

  1.   

    iLen/13是什么意思?你的数据是13组还是13行?
    人家的代码只是一个例子,你不能原封不动抄过来,你必须理解人家的代码并根据自己的需求进行调整
      

  2.   

    你的逻辑结构不对。
    按下面的逻辑重新理清你的思路,再写一下看看吧
    CFile的逻辑应该是类似CFile cfile;
    cfile.Open(_T("Write_File.dat"), CFile::modeCreate | 
       CFile::modeReadWrite);
    char pbufWrite[100];
    memset(pbufWrite, 'a', sizeof(pbufWrite));
    cfile.Write(pbufWrite, 100);         
    cfile.Flush();
    cfile.SeekToBegin();
    char pbufRead[100];
    while (cfile.Read(pbufRead, sizeof(pbufRead)) )
    {
      cout << pbufRead << endl ;
    }
    ASSERT(0 == memcmp(pbufWrite, pbufRead, sizeof(pbufWrite)));
      

  3.   

    感觉iLen/13是求行数吧,直接用估计不行,应该自己重新处理一下
      

  4.   

    file.SeekToBegin();//指针移到文件头
    file.Read(pBuf,iLen); 
      

  5.   

    对不起:iLen/13是不该有的,这是我在摸索时添加的,忘了去掉!!
      

  6.   

    谢谢楼上各位!这样读取的数据是string类型的,还是double类型的??
      

  7.   

    不能完全照搬,把iLen/13改为iLen;
    你这么读以后怎么分开又是一个问题。
      

  8.   

    支持
    还有按照LZ的方法读出来是string,不可能是double
      

  9.   

    问题解决,用ifstream>>Matrix<double> matrix[i][j];就可以啦,想string类型就string类型,想double类型就double类型!另外,ifstream自动识别换行等等!没有上面说的那么复杂!补充一句,我是在vc2008上操作的!