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

标签 c++ csv

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/

相关文章:

c++ - SDL 2 BMP block 传输

python - 合并多个 CSV 文件而不重复标题(使用 Python)

C++:数组的 Setter 和 Getter

c++ - CryptoPP 生成无效的 key RSA

python - 在 Mac Yosemite 上的 csvkit python 包中使用 csvsql 实用程序时出错

c# - LINQ 表达式 C# 中的条件

javascript - 使用 D3.csv 在 DC.JS 中加载 CSV 文件

c# - 将棘手的字符串转义为 CSV 格式

c++ - 使用紧凑指针表示法结束多维数组

c++ - 从 gnuplot 获取变量到 c++