gpt4 book ai didi

c++ - csv 文件到带换行符的二维数组 cpp

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

void generateSudokuFromCSV(std::ifstream &infile, sudokuT sudoku) {
for (int i = 0; i < 9; i++) {
std::string line;
std::getline(infile, line);
if (!infile.good()) break;
std::istringstream iss(line);
for (int j = 0; j < 9; j++) {
std::string ch;
std::getline(iss, ch, ',');
if (!iss.good()) break;
std::istringstream converter(ch);
converter >> sudoku.board[i][j];
}
}
}

这是我用于读取 csv 文件和设置数独板的代码。仅当每行最后一个数字后有逗号时才有效。这是文件的样子:

0,8,6,0,5,0,3,0,0
4,0,7,0,9,0,0,0,0
5,2,0,8,7,0,0,0,0
0,5,0,0,8,0,0,0,0
7,1,0,0,4,0,0,6,5
0,0,0,0,2,0,0,1,0
0,0,0,0,1,8,0,4,3
0,0,0,0,6,0,1,0,9
0,0,5,0,3,0,8,7,0

如果文件看起来像这样,代码就可以工作:

0,8,6,0,5,0,3,0,0,
4,0,7,0,9,0,0,0,0,
5,2,0,8,7,0,0,0,0,
0,5,0,0,8,0,0,0,0,
7,1,0,0,4,0,0,6,5,
0,0,0,0,2,0,0,1,0,
0,0,0,0,1,8,0,4,3,
0,0,0,0,6,0,1,0,9,
0,0,5,0,3,0,8,7,0,

但这不是典型的 csv,也不是 excel 转换它的方式。那么我怎样才能更改代码以正确处理这个问题。 getline 可以带多个分隔符吗?感谢您的时间和见解。

最佳答案

std::getline(iss, ch, ',');

将无法读取最后一个字段。考虑到这一点,请替换行

if (!iss.good()) break;

具有以下内容:

if (!iss.good())
{
iss.clear();
std::getline(iss, ch);
if ( !iss.good() ) // This is a real problem.
exit(EXIT_FAILURE);
}

关于c++ - csv 文件到带换行符的二维数组 cpp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33603800/

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