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/