J'ai donc la chaîne de données suivante, qui est reçue via une connexion TCP winsock, et je voudrais faire une tokenisation avancée, dans un vecteur de structures, où chaque structure représente un enregistrement.tokenizing une chaîne de données dans un vecteur de structures?
std::string buf = "44:william:adama:commander:stuff\n33:luara:roslin:president:data\n"
struct table_t
{
std::string key;
std::string first;
std::string last;
std::string rank;
std::additional;
};
Chaque enregistrement de la chaîne est délimité par un retour chariot. Ma tentative de diviser les enregistrements, mais pas encore diviser les champs:
void tokenize(std::string& str, std::vector<string>records)
{
// Skip delimiters at beginning.
std::string::size_type lastPos = str.find_first_not_of("\n", 0);
// Find first "non-delimiter".
std::string::size_type pos = str.find_first_of("\n", lastPos);
while (std::string::npos != pos || std::string::npos != lastPos)
{
// Found a token, add it to the vector.
records.push_back(str.substr(lastPos, pos - lastPos));
// Skip delimiters. Note the "not_of"
lastPos = str.find_first_not_of("\n", pos);
// Find next "non-delimiter"
pos = str.find_first_of("\n", lastPos);
}
}
Il semble tout à fait inutile de répéter tout ce code à nouveau pour tokenizer plus chaque enregistrement par l'intermédiaire du côlon (séparateur de champ interne) dans le struct et pousser chaque structure dans un vecteur. Je suis sûr qu'il y a une meilleure façon de faire cela, ou peut-être que le design est en soi erroné.
Nous vous remercions de votre aide.
Si vous pouvez utiliser Boost, ce serait plutôt bien fait avec sa bibliothèque de tokenizer, sa bibliothèque d'algorithmes de chaînes, ou, pour la solution la plus robuste, avec boost.spirit, comme ici: http://www.boost.org/doc/libs/1_46_1/libs/spirit/doc /html/spirit/qi/tutorials/employee___parsing_into_structs.html – Cubbi
raté ce commentaire. +1 pour l'esprit altho qui est trop lourd pour le format de données utilisé dans ce cas – user237419
utilisez [boost :: tokenizer] (http://www.boost.org/doc/libs/1_46_1/libs/tokenizer/index.html) – user237419