无法在C ++中读取和加载CSV文件中的数据

时间:2012-03-17 21:41:13

标签: c++ file-io csv fstream

我正在创建一个神经网络,我需要从CSV文件中读取数据,并将每一行存储为网络输入的单独训练集。每一行由一组模式组成,并以目标输出结束。

我已经能够读取第一行并将其解析为各自的指针列表,然后通过创建接受两个指针的基类的新对象将它们存储在向量中。

问题是我无法弄清楚如何从文件中读取一行,将该设置存储在对象指针向量中,然后继续读取每一行直到文件末尾,同时存储每一行​​的向量。我将非常感谢可以提供的任何帮助以及可能更有效或最佳的可能建议。

void processLine( string &line )
{

      double* pattern = new double[numPatterns];
      double* target = new double[numTargets];


      char* cstr = new char[line.size()+1];
      char* t;
      strcpy(cstr, line.c_str());

      int i = 0;
      t=strtok (cstr,",");

      while ( t!=NULL && i < (numPatterns + numTargets) )
      { 
        if ( i < numPatterns ) pattern[i] = atof(t);
        else target[i - numPatterns] = atof(t);

        //move token onwards
        t = strtok(NULL,",");
        i++;            
     }


     data.push_back( new priceEntries( pattern, target ) );     
}


bool loadDataFile(const char* file, int numP, numT)
{
        numPatterns = numP;
    numTargets = numT;

    fstream inputFile;
    inputFile.open(filename, ios::in);  


    if ( inputFile.is_open() )
    {

         string line = "";

         //read data
         while ( getline(inputFile, line) )
         {      
          processLine(line);
         }

   random_shuffle(data.begin(), data.end());

   inputFile.close()

   return true;
   }

   else
   {
        cout << "File could not be opened.\n";
   }
}

1 个答案:

答案 0 :(得分:0)

您的问题似乎是基本的csv解析。如果是这样,我建议使用一个简单的解析器库(想到libcs​​v),而不是试图从头开始处理解析。