Oh in Ordnung hier ist etwas, das es tun wird. Es ist darauf spezialisiert, Ihre Bedürfnisse zu erfüllen, aber es funktioniert. Ich habe auch eine BOOST-Technik, aber das ist wahrscheinlich zu weit fortgeschritten für Sie ...
#ifndef BOOST_METHOD
std::string popToken(std::string& text, const std::string& delimiter)
{
std::string result = "";
std::string::size_type pos = text.find(delimiter);
if (pos != std::string::npos) {
result.assign(text.begin(), text.begin() + pos);
text.erase(text.begin(), text.begin() + pos + delimiter.length());
} else {
text.swap(result);
}
return result;
}
#endif
void readCSV()
{
const size_t rows = 2;
const size_t cols = 3;
std::string data[rows][cols];
std::ifstream fin;
fin.open("csv.txt");
if (! fin.fail()) {
std::string line;
while (! fin.eof()) {
fin >> line;
#ifdef BOOST_METHOD
boost::tokenizer<boost::escaped_list_separator<char> > tknzr(line, boost::escaped_list_separator<char>('\\', ',', '\"'));
boost::tokenizer<boost::escaped_list_separator<char> >::iterator it = tknzr.begin();
for (size_t row = 0; row < rows && it != tknzr.end(); row++) {
for (size_t col = 0; col < cols && it != tknzr.end(); col++, ++it) {
data[row][col] = *it;
std::cout << "(" << row << "," << col << ")" << data[row][col] << std::endl;
}
}
#else
for (size_t row = 0; row < rows && line.length(); row++) {
for (size_t col = 0; col < cols && line.length(); col++) {
data[row][col] = popToken(line, ",");
std::cout << "(" << row << "," << col << ")" << data[row][col] << std::endl;
}
}
#endif
}
fin.close();
}
}
Haben Sie diese SO gesehen [Frage] (http://StackOverflow.com/Questions/1120140/csv-Parser- in-c)? – Nekresh
warum nicht versuchen, dies selbst zu tun? Wenn Ihr Code nicht funktioniert und Sie nicht verstehen können, warum nicht, dann veröffentlichen Sie Ihren Code und zeigen Sie, wie sich die Ergebnisse von Ihren Erwartungen unterscheiden. Wenn Sie dies tun, werden Ihnen die Menschen helfen. – ravenspoint
Duplizieren Sie die folgende Frage: http://stackoverflow.com/questions/1120140/csv-parser-in-c –