Je suis certes pas très familier avec le C++ fonctions de chaîne, mais voici ma tentative:
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
std::ifstream fin("Info.txt");
if(!fin)
{
std::cout << "Error opening the file" << std::endl;
return(1);
}
char* line_cstr = new char[1000];
char name[1000];
int age;
char color[1000];
char* rest = new char[1000];
fin.getline(line_cstr, 1000);
while (strlen(line_cstr) != 0) {
int numTokensRead = sscanf(line_cstr, "%s %d %s %1000[0-9a-zA-Z ]s", name, &age, color, rest);
if (numTokensRead >= 3 ) {
std::cout <<"name: " << name <<", age: " << age <<", color: " << color <<"\n";
strcpy(line_cstr, rest);
}
// do some error checking for incomplete entries
else if (numTokensRead == 1) {
if (strlen(name) == strlen(line_cstr)) {
// we're done!
return 0;
}
// skip the first token
sscanf(line_cstr, "%*s %1000[0-9a-zA-Z ]s", line_cstr);
}
else if (numTokensRead == 2) {
// skip the first 2 tokens
sscanf(line_cstr, "%*s %*d %1000[0-9a-zA-Z ]s", line_cstr);
}
}
}
Agissant sur le fichier texte suivant:
Info.txt
Mike 25 Red Dave Gabe 8 Green 10 Green
sortie
$ ./a.out
name: Mike, age: 25, color: Red
name: Gabe, age: 8, color: Green
Je ne suis pas sûr à 100% que cela gère tous les cas d'erreurs possibles - deux ints d'affilée, un flottant, plusieurs lignes, etc. - mais cela devrait vous aider à démarrer.
Vous n'avez pas besoin d'ouvrir le fichier si vous transmettez le nom de fichier dans le constructeur. Si votre fichier texte n'a pas de données correctement formatées sur chaque ligne, vous devrez soit utiliser des séparateurs (comme un fichier CSV), soit vous allez avoir un mauvais moment. – user657267
Je vous suggère de lire tout le fichier et l'enregistrer dans une chaîne std :: string, puis trouver ce que vous voulez dans cette chaîne – nbro
peut-être vous pourriez appeler un appel système qui exécute une commande bash. Utilisez la commande 'cut' pour placer chaque variable sur une ligne distincte dans un nouveau fichier tmp. à partir de C++, lisez le fichier tmp et utilisez getline() pour placer chaque ligne dans une nouvelle variable. – Kam