none
comment trier un fichier texte selon le nombre de la ligne RRS feed

  • Question

  • Bonjour,
    j'ai rencontré un probleme

    j'ai un fichier texte :
    0 1 2 C
    10 1 2 S
    7 1 2 C
    11 1 2 S
    9 3 43 C
    10 3 43 S
    1 3 43 C
    101 3 43 S


    avec ce code

    ifstream in("fout2.txt");
    if (in) {
    vector<string> lines;
    string line;
    while (getline(in, line))
    lines.push_back(line);
    sort(lines.begin(), lines.end(), [](const string& a, const string& b) {
    // Use the first word for comparison
    return a.substr(0, a.find_first_of(' ')) <
    b.substr(0, b.find_first_of(' '));
    });
    for_each(lines.begin(), lines.end(), [](const string& s) {
    std::cout << s << '\n';
    });
    }

    j' obtient le resultat suivant :

    0 1 2 C
    1 3 43 C
    10 1 2 S
    10 3 43 S
    11 1 2 S
    101 3 43 S
    7 1 2 C
    9 3 43 C

    mais moi je cherche a avoir ce triage :

    0 1 2 C
    1 3 43 C
    7 1 2 C
    9 3 43 C
    10 1 2 S
    10 3 43 S
    11 1 2 S
    101 3 43 S

    merci
    mardi 24 décembre 2013 11:01

Réponses

  • Bonjour,

    Il faut convertir en entier les chaînes extraites :

    sort(lines.begin(), lines.end(), [](const string& a, const string& b) { // Use the first word for comparison
    int aValue;
    int bValue;
    stringstream(a.substr(0, a.find_first_of(' '))) >> aValue;
    stringstream(b.substr(0, a.find_first_of(' '))) >> bValue; return a < b; });


    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Proposé comme réponse Aurel Bera mardi 7 janvier 2014 09:56
    • Marqué comme réponse Aurel Bera mercredi 8 janvier 2014 10:08
    dimanche 29 décembre 2013 22:22
    Modérateur

Toutes les réponses

  • Bonjour,

    Il faut convertir en entier les chaînes extraites :

    sort(lines.begin(), lines.end(), [](const string& a, const string& b) { // Use the first word for comparison
    int aValue;
    int bValue;
    stringstream(a.substr(0, a.find_first_of(' '))) >> aValue;
    stringstream(b.substr(0, a.find_first_of(' '))) >> bValue; return a < b; });


    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Proposé comme réponse Aurel Bera mardi 7 janvier 2014 09:56
    • Marqué comme réponse Aurel Bera mercredi 8 janvier 2014 10:08
    dimanche 29 décembre 2013 22:22
    Modérateur
  • Bonjour

    Un petit retour SVP?

    Merci!

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mardi 7 janvier 2014 09:57