gpt4 book ai didi

C++读取CSV文件避免换行符

转载 作者:太空宇宙 更新时间:2023-11-04 13:53:51 25 4
gpt4 key购买 nike

我有一个关于在 C++ 中读取 CSV 文件内容的问题。基本上我有一个包含以 CSV 格式保存的数据的图 block 。我想要做的是能够读取这些数据并将内存中的所有内容分配到一个矩阵上,或者将每一列分成一个单独的 vector 。

我要做的第一件事是获取行数并在控制台上打印内容。

我通过 getline(stream, line, separator) 来做到这一点:

if(myFile.is_open())
{
while(!myFile.eof())
{
std::getline(myFile, line, ',');
std::cout << n_Lines << ") " << line << std::endl;
n_Lines = n_Lines + 1;
}
}

现在的问题是,以这种方式解析采用逗号作为分隔符,但考虑了/n(换行符)并将其附加到行的每个最后一个数字:

198) 86
199) 47
46
200) 53
201) 58
202) 4
203) 62
204) 90
205) 98
206) 58
207) 39
208) 4
34
209) 70
210) 58
211) 33
212) 8
213) 73
214) 20
215) 61
216) 9
217) 76
6
218) 22

在这个 cas 中 n_Lines 应该计算元素,但是每十个元素一次,两个数字粘在一起作为一个完整的字符串。

如何避免这种情况并正确解析我的文件?有没有更有效的方法来执行此操作并将我的数据直接保存到矩阵中?

谢谢, 吉奥

最佳答案

如果在开始读取文件之前已知列数,则以下代码应该有效:

const int NColumns = 10; // for example
while( myFile )
{
// start a new line in the matrix
for( int column = 0; column < NColumns; ++column )
{
if( column > 0 )
myFile >> sep<','>; // read the separator
int x;
if( !( myFile >> x ) )
break; // eof or read error
// add 'x' to the current line in the matrix
}
}

实用程序 sep<> 看起来像这样

template< char C >
std::istream& sep( std::istream& in )
{ // reads separator 'C'
char c;
if( in >> c && c != C )
in.setstate( std::ios_base::failbit );
return in;
}

关于C++读取CSV文件避免换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22401701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com