getline() 跳过第一行和最后一行之间每一行的第一列
getline() skipping first column of every line between the first and last line
我已经看了2天了这段代码,但仍然找不到我出错的地方。在线搜索并应用了所有方法,但它仍然跳过第一列。例如,如果我有 first line ->1,2,3,4 second line->5,6,7,8 and third line->9,10,11,12.
The output it gives is
first line ->1,2,3,4 second line->6,7,8 and third line->9,10,11,12.
并且不知道为什么它也将它们存储在一个向量而不是 2d 向量中,但这不是真正的问题,因为我可以解决它。非常感谢您的帮助。
#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;
}
最后,
我通过更改代码开始工作。通过替换
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);
}
通过格式化提取手动读取所有值
相关文章:
- 查找矩阵C++中每一列和每一行的最小和最大元素
- 如何在C++中获取二维数组中最少的一列数?
- 如何允许用户选择何时停止三列中的每一列的旋转
- 从我的2d数组中的一列返回的字符串值被压缩为一个字符串(在Mac os上打开Windows txt文件)
- 在犰狳立方体中添加一列 1 的有效方法
- 在二维向量的每一列中查找最大值
- 只有一列适合其内容大小,而另一列则拉伸
- 如何将单独的数组分组在一起(类似于按一列对表进行排序)
- C++ 最后一列中的直方图错误
- 添加两个矩阵会打印一列垃圾数据 c++
- C 特征:通过参考将矩阵的一列传递到函数中
- 仅制作一列qtreewidget可编辑//故障排除
- 在 QTableView 中仅对一列进行排序,而不对其他列进行排序.独立列
- 找出(x,y)坐标的列表是矩阵中的一行还是列
- 按列对CSV文件进行排序,并与C 中的另一列进行比较
- 隔离C 中向量的一列
- 读取数据文件并将每一列分配给各个数组
- 按一列对二维数组进行气泡排序
- 每隔一行或每一列提取一个特征矩阵作为一个新矩阵
- C++在二维数组中的每一行和每一列中查找最小值和最大值