IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Aide voir création


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut Aide voir création
    Etant devenu tres nul car aucun travail depuis 2 ans et donc ne comprennant plus rien...
    J'aimerais vérifier l'existance d'un fichier texte, le créer si il existe pas ou l'ouvrir si il existe avant d'y chercher un mot (1 mot par ligne).
    Si le mot est trouvé on affiche celui de la ligne du dessous sinon on l'ajoute en fin de fichier.
    On prendra le mot rechercher dans la variable "str".


    Ex :
    Le fichier contient :

    test
    test1
    test2


    Si str vaut test, on affiche test1, si str vaut test3 on ajoute à la fin.

    Si le faire est trop long, pourriez vous me trouver des morceaux de code que je pourrais utiliser ou les commandes a utiliser avec leur explication (utlisation et fonction).

    Merci beaucoup.

  2. #2
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Ce n'est pas très difficile, tu as toutes les infos pour gérer les fichiers dans la http://c.developpez.com/faq/cpp/?page=fichiers

    Ici tu n'as qu'à lire tout le fichier ligne par ligne (exemple dans la FAQ) et dès que tu trouves ton mot tu lit la ligne en-dessous et tu t'arrêtes.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    Oué mais je comprend pas trop...
    C'est la meme commande pour ouvrir et lire ?
    C'est quoi qui dit "ligne X", comment dire "ligne X + 1" ?

    #include <fstream>

    void AjouterUneLigne()
    {
    // std::ios_base::out est automatiquement ajouté par le
    // constructeur de std::ofstream
    std::ofstream file( "fichier.txt", std::ios_base::app );
    file << "Une ligne\n";
    }

    int main()
    {
    // création du fichier et écriture d'une ligne
    AjouterUneLigne();
    // ouverture du fichier existant et rajout d'une nouvelle ligne
    AjouterUneLigne();
    // "fichier.txt" contient 2 lignes
    }
    Comment je fais pour mettre tout dans le mainn sans utiliser le void ?

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Pour lire le fichier ligne par ligne:
    http://c.developpez.com/faq/cpp/?pag...ture_par_ligne

    Ce qui va grandement t'avancer, non?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    Bon, ça donne ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
            std::ifstream fichier( "dials.txt" );
            if ( fichier )
            {
                    std::string ligne;
                    while ( std::getline( fichier, ligne ) )
                    {
                            if(str == ligne)
                            {
                            Form1->DemoBot.BotCommand.SendMsg(lpBuddyAccount, ligne+1, "");
                            }
                            else
                            {
                            std::ofstream file( "dials.txt", std::ios_base::app );
                            file << (lpMsg+String("\n")).c_str();
                            }
     
                    }
            }
    Mais ça marche pas top :

    [C++ Error] Unit1.cpp(70): E2094 'operator==' not implemented in type 'AnsiString' for arguments of type '_STL::string'
    [C++ Error] Unit1.cpp(72): E2094 'operator+' not implemented in type '_STL::string' for arguments of type 'int'

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    OULA ...
    Attend, t'as plein de variables dont on ne voit pas l'initialisation...
    C'est un bon début, mais y'a plein de trucs que nous dit pas là...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    str : variable contenant un mot mais le format je le connais pas du tout
    Pour
    Form1->DemoBot.BotCommand.SendMsg(lpBuddyAccount, ligne+1, "");
    c'est le "std::cout << ligne << std::endl;" modifié pour mon prog mais la ligne marche !
    J'ai juste besoin de savoir si ligne+1 c'est bon pour lire la ligne du dessous !

    Sinon tout le reste c'est du code via la FAQ un peu modifié

  8. #8
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut
    Je viens du C et je me met peniblement aux Strings (les mauvaises habitudes) mais là le compilo semble claire: pas d'operateur + definit pour la classe std::String donc ta commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ligne +1 // ligne etant un String
    ne donnera pas ce que tu souhaites...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    if(str.c_str() == ligne.c_str())
    J'ai trouvé deja ça ! lol


    Je me tape ça sans arret, ça vient d'ou ?

    [C++ Warning] _epilog.h(38): W8059 Structure packing size has changed

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    Citation Envoyé par harsh
    Je viens du C et je me met peniblement aux Strings (les mauvaises habitudes) mais là le compilo semble claire: pas d'operateur + definit pour la classe std::String donc ta commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ligne +1 // ligne etant un String
    ne donnera pas ce que tu souhaites...
    Alors comment aller a la ligne suivante et y recup le mot ?

  11. #11
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Spike21
    str : variable contenant un mot mais le format je le connais pas du tout
    C'est très important de le savoir !
    C'est toi qui programma = c'est toi qui le fixe !
    Prend un std::string... of course

  12. #12
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Spike21
    Alors comment aller a la ligne suivante et y recup le mot ?
    Tu peux lire ton fichier ligne par ligne, comme tu l'as déjà fait...
    Lorsque tu rencontres le mot magique, tu passes une variable à 1.
    Au coup d'après (ligne suivante), tu affiches la ligne, et tu remet la variable à 0...
    Simple...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    Ya pas plus simple pour dire ligne suivante ?
    Car j'ai jamais fait de C++ avant ça !

  14. #14
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Spike21
    Ya pas plus simple pour dire ligne suivante ?
    Car j'ai jamais fait de C++ avant ça !
    Ben c'est pas compliqué du tout!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    int main {
    std::string str;
    int affichage = 0;
    
    std::ifstream fichier( "dials.txt" );
            if ( fichier )
            {
                    std::string ligne;
                    while ( std::getline( fichier, ligne ) )
                    {
                            if (affichage == 1) {
                                     std::cout << ligne;
                                     affichage = 0;
                            }                        
    
    
                             if(str == ligne)
                            {
                                      affichage = 1;
                            }
                            else
                            {
                            std::ofstream file( "dials.txt", std::ios_base::app );
                            file << (lpMsg+String("\n")).c_str();
                            }
    
                    }
            }
    Tiens voilà le début du code....

    CE qui est en rouge = à changer !
    En effet, ton fichier est déjà ouvert en lecture, tu peux pas l'ouvrir par dessus en écriture (enfin... je pense pas!)

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
            std::ifstream fichier( "dials.txt" );
            if ( fichier )
            {
                    std::string ligne;
                    while ( std::getline( fichier, ligne ))
                    {
                            if (affichage == 1) {
                                    Form1->DemoBot.BotCommand.SendMsg(lpBuddyAccount, ligne.c_str(), "");
                                     affichage = 0;
                            }
                            if(str.c_str() == ligne.c_str())
                            {
                                   affichage = 1;
                            }
                            else
                            {
                                    std::ofstream file( "dials.txt", std::ios_base::app );
                                    file << (lpMsg+String("\n")).c_str();
                            }
     
                    }
            }
    Ca donne ça !
    Je vois, tu attends la lecture de ligne suivante pr afficher le message...

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    J'ai plus d'erreur mais ça marche pas mieux, il entre pas dans la boucle du WHILE...

  17. #17
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Spike21
    J'ai plus d'erreur mais ça marche pas mieux, il entre pas dans la boucle du WHILE...
    DEux choses, rapidement:
    1) si il entre pas dans la boucle, c'est que ton fichier n'existe pas
    ->tu dois faire du debug

    2)La partie en rouge précedemment ne marchera toujours pas...

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    1) le fichier existe. (vide)
    2) le rouge a été testé et marche.

  19. #19
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    if(str.c_str() == ligne.c_str())
    Remplacer par

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    J'ai ajouté 2 break :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    std::ifstream fichier( "dials.txt" );
            int affichage = 0;
            if ( fichier )
            {
                    std::string ligne;
                    while ( std::getline( fichier, ligne ))
                    {
                            if (affichage == 1)
                            {
                                    Form1->DemoBot.BotCommand.SendMsg(lpBuddyAccount, ligne.c_str(), "");
                                    affichage = 0;
                                    break;
                            }
                            if (str.c_str() == ligne.c_str())
                            {
                                    affichage = 1;
                            }
                            else
                            {
                                    std::ofstream file( "dials.txt", std::ios_base::app );
                                    file << (lpMsg+String("\n")).c_str();
                                    break;
                            }
     
                    }
            }
    Mais il prend pas en compte affichage et ecris toujours le mot dans le fichier...

    Et si je met if (str == ligne) ça marche plus la comparaison !
    Et j'ai
    [C++ Error] Unit1.cpp(76): E2094 'operator==' not implemented in type 'AnsiString' for arguments of type '_STL::string'

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Aide pour création requête
    Par in dans le forum Oracle
    Réponses: 7
    Dernier message: 19/06/2006, 13h55
  2. developpeur c++ demande aide pour création d'un pieton 3D
    Par fumidu dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 29/05/2006, 17h51
  3. Outil d'aide à la création d'une DTD
    Par Elmilouse dans le forum Valider
    Réponses: 1
    Dernier message: 28/02/2006, 01h56
  4. [MySQL] Aide à la création d'une requête
    Par tom06440 dans le forum Requêtes
    Réponses: 6
    Dernier message: 19/10/2005, 22h05
  5. aide sur création d'un composant
    Par laetus dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/07/2004, 10h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo