Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ getline()跳过第一行和最后一行之间每行的第一列_C++_File_Csv_Fstream_Getline - Fatal编程技术网

C++ getline()跳过第一行和最后一行之间每行的第一列

C++ getline()跳过第一行和最后一行之间每行的第一列,c++,file,csv,fstream,getline,C++,File,Csv,Fstream,Getline,我已经看了这段代码两天了,但仍然找不到哪里出错了。在线搜索并应用了所有方法,但仍然跳过了第一列。例如,如果我有 第一行->1,2,3,4第二行->5,6,7,8和第三行->9,10,11,12。 它给出的输出是 第一行->1,2,3,4第二行->6,7,8和第三行->9,10,11,12。 我不知道为什么它也把它们存储在一个向量中,而不是二维向量中,但这并不是一个真正的问题,因为我可以解决这个问题。 非常感谢你的帮助 #include <iostream> #include <

我已经看了这段代码两天了,但仍然找不到哪里出错了。在线搜索并应用了所有方法,但仍然跳过了第一列。例如,如果我有
第一行->1,2,3,4第二行->5,6,7,8和第三行->9,10,11,12。
它给出的输出是
第一行->1,2,3,4第二行->6,7,8和第三行->9,10,11,12。
我不知道为什么它也把它们存储在一个向量中,而不是二维向量中,但这并不是一个真正的问题,因为我可以解决这个问题。 非常感谢你的帮助

#include <iostream>
#include <fstream>
#include <sstream>
#include<string>
#include <vector>
#include <algorithm>

using namespace std;
vector<vector<int> > array;
vector<vector<int> > readCSV(string filename)
   {
     vector<vector<int> > contents;
     vector<int> line_contents; 
     ifstream in(filename);
     if(in.is_open()){
      string line;
    while(getline(in, line))
{
  line_contents.clear();
  // contents.push_back(vector<int>());
  //vector<int> line_contents;// = contents[contents.size()-1];  
istringstream iss(line);
    do
  {
        int value;
    //line_contents.clear();
    //  iss.ignore();
    //string fieldend;
    // getline(iss, fieldend, ','); 
    if( iss >> value )
     {
            line_contents.push_back(value);
      }
    else
      {

            iss.clear();
      }
    // iss.clear();
        string fieldend;
        getline(iss, fieldend, ',');

       // read to separator
  } while(!iss.eof());
array.push_back(line_contents); 
//contents.push_back();
//contents.push_back( vector<int>());
 }
 in.close();
}
 else{
cout<<"Couldn't open input file... make sure the file is in the cwd"<<endl;
}
 return contents;
}

  int main()
 {
   //  int size;
     int max=0;
   ofstream F1 ("inputDBX.csv");
    ofstream F2 ("inputDBX2.csv");

  readCSV("inputDB.csv");
  if(F1.is_open() && F2.is_open()){
 // print the array
  for(int i=0; i<array.size();)
   {
    F1<<array[0][i]<<","<<array[0][i+1]<<","<<array[0][i+2]<<","<<array[0] [i+1]<<","<<array[0][i+2]<<endl;
   if (max< array[0][i+2]){
  max=  array[0][i+2];
  }
    else{
F2<<array[0][i]<<","<<"0.0"<<","<<array[0][i+2]<<","<<array[0][i+1]<<","<<max+0.5<<endl;
  }
  i=i+3;
}
 F1.close();
 F2.close();
}
 else{
cout<<"Unable to open/create one/both output files;"<<endl;
}
 //  cout<<array.size()<<"x"<<array[1].size()<<endl;     

  for(int i=0; i<array.size(); ++i)
{
for(int j=0; j<array[i].size(); ++j)
  {
cout << array[i][j] <<" ";
  }
cout << endl;

}
return 0;      
 }
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
矢量阵列;
矢量读取CSV(字符串文件名)
{
载体内容;
矢量线内容;
ifstream-in(文件名);
if(in.is_open()){
弦线;
while(getline(in,line))
{
行内容。清除();
//contents.push_back(vector());
//向量行_contents;//=contents[contents.size()-1];
istringstream iss(线);
做
{
int值;
//行内容。清除();
//iss.ignore();
//字符串字段结束;
//getline(iss,fieldend,',');
如果(iss>>值)
{
行内容。推回(值);
}
其他的
{
iss.clear();
}
//iss.clear();
字符串字段结束;
getline(iss,fieldend,',');
//读到分隔符
}而(!iss.eof());
数组。推回(行内容);
//内容。向后推();
//contents.push_back(vector());
}
in.close();
}
否则{

cout最后我通过修改代码开始工作

   while(getline(in, line))
 {
   line_contents.clear(); 
   istringstream iss(line);
  do
  {
    int value;

if( iss >> value )
 {
        line_contents.push_back(value);
  }
else
  {

        iss.clear();
  }
// iss.clear();
    string fieldend;
    getline(iss, fieldend, ',');

   // read to separator
  } while(!iss.eof());
array.push_back(line_contents); 

 }
为此:

while(getline(in, line))
{
  line_contents.clear();
istringstream iss(line);
    int value,value2,value3;
    char valuea,valueb;

    do{
    if( iss >> value >> valuea >>value2>> valueb>>value3)
    {
        line_contents.push_back(value);
        line_contents.push_back(value2);
        line_contents.push_back(value3);
    }}while(!iss.eof());
array.push_back(line_contents); 

 }

通过格式化提取手动读取所有值

查看我已经看到了答案,但在GetLine之前我没有使用任何cin它不是
cin
,而是格式化提取(
运算符>>
)。我将if(iss>>值)更改为if((iss>>值)。get())甚至if((iss>>值)。ignore())但是情况反而变得更糟。get()跳过了两列,而.ignore()只返回了第一个数字。你应该接受这个答案,这样其他人就可以看到你的问题得到了解决(是的,你可以接受自己的答案:)根据网站的说法,我只能在两天内接受它